java中的反射三(反射机制深入---获得类的结构)
来源:互联网 发布:淘宝上的epiphone 编辑:程序博客网 时间:2024/05/20 18:48
取得类的结构
在开发中可以通过反射得到一个类的完整结构,那么这就是使用到java.lang.reflect包中的以下几个类:
Constructor:表示类中的构造方法
Field:表示类中的属性
Method:表示类中的方法
以上三个类都是AccessibleObject类的子类
案例如下:
interface China{// 定义China接口public static final String NATIONAL = "China" ;// 定义全局常量public static final String AUTHOR = "fly" ;// 定义全局常量public void sayChina() ;// 无参的,没有返回值的方法public String sayHello(String name,int age) ;// 定义有两个参数的方法,并返回内容}public class Person implements China{private String name ;private int age ;public Person(){// 无参构造}public Person(String name){this.name = name ;// 设置name属性}public Person(String name,int age){this(name) ;this.age = age ;}public void sayChina(){// 覆写方法System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;}public String sayHello(String name,int age){return name + ",你好!我今年:" + age + "岁了!" ;}public void setName(String name){this.name = name ;}public void setAge(int age){this.age = age ;}public String getName(){return this.name ;}public int getAge(){return this.age ;}};
取得Person类的全部实现的接口
public class GetInterfaceDemo{public static void main(String args[]){Class<?> c1 = null ;// 声明Class对象try{c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化对象}catch(ClassNotFoundException e){e.printStackTrace() ;}Class<?> c[] = c1.getInterfaces() ;// 以数组形式返回实现的全部接口for(int i=0;i<c.length;i++){System.out.println("实现的接口名称:" + c[i].getName()) ;// 输出接口名称}}};
取得Pserson类所继承的父类
public class GetSuperClassDemo{ public static void main(String args[]){ Class<?> c1 = null ; // 声明Class对象 try{ c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象 }catch(ClassNotFoundException e){ e.printStackTrace() ; } Class<?> c2 = c1.getSuperclass() ; // 取得父类 System.out.println("父类名称:" + c2.getName()) ; }};
取得Person类的全部构造方法(包含方法中参数,方法的修饰符,以及名称)
public class GetConstructorDemo03{public static void main(String args[]){Class<?> c1 = null ;// 声明Class对象try{c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化对象}catch(ClassNotFoundException e){e.printStackTrace() ;}Constructor<?> con[] = c1.getConstructors() ;// 取得一个类中的全部构造for(int i=0;i<con.length;i++){Class<?> p[] = con[i].getParameterTypes() ;// 得到构造方法中的全部参数System.out.print("构造方法:" ) ; // 输出构造,直接打印int mo = con[i].getModifiers() ; // 得到所要的访问权限System.out.print(Modifier.toString(mo) + " ") ;// 得到修饰符System.out.print(con[i].getName()) ;// 取得构造方法的名字System.out.print("(") ;for(int j=0;j<p.length;j++){System.out.print(p[j].getName() + " arg" + i) ;if(j<p.length-1){// 判断此是否是最后一个参数System.out.print(",");// 输出“,”}}System.out.println("){}") ;}}};
取得Pserson类中的方法
public class GetMethodDemo{public static void main(String args[]){Class<?> c1 = null ;// 声明Class对象try{c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化对象}catch(ClassNotFoundException e){e.printStackTrace() ;}Method m[] = c1.getMethods() ;// 取得全部方法for(int i=0;i<m.length;i++){Class<?> r = m[i].getReturnType() ;// 得到返回值类型Class<?> p[] = m[i].getParameterTypes() ;// 取得全部参数的类型int xx = m[i].getModifiers() ;// 得到修饰符System.out.print(Modifier.toString(xx) + " ") ;// 输出修饰符System.out.print(r + " ") ;System.out.print(m[i].getName()) ;System.out.print("(") ;for(int j=0;j<p.length;j++){System.out.print(p[j].getName() + " " + "arg" + j) ;if(j<p.length-1){System.out.print(",") ;}}Class<?> ex[] = m[i].getExceptionTypes() ;// 取出异常if(ex.length>0){System.out.print(") throws ") ;}else{System.out.print(")") ;}for(int j=0;j<ex.length;j++){System.out.print(ex[j].getName()) ;if(j<p.length-1){System.out.print(",") ;}}System.out.println() ;}}};
取得Pserson类中的属相
1.取得实现的接口或者父类中的公共属性:
public Field[] getField()throws SecurityException
2.得到本类中全部属性:
public Field[] getDeclaredFields()throws SecurityException
public class GetFieldDemo{ public static void main(String args[]){ Class<?> c1 = null ; // 声明Class对象 try{ c1 = Class.forName("org.lxh.demo15.Person") ; // 实例化对象 }catch(ClassNotFoundException e){ e.printStackTrace() ; } { // 本类属性 Field f[] = c1.getDeclaredFields() ; // 取得本类中的属性 for(int i=0;i<f.length;i++){ Class<?> r = f[i].getType() ; // 得到属性类型 int mo = f[i].getModifiers() ; // 得到修饰符的数字 String priv = Modifier.toString(mo) ; // 还原修饰符 System.out.print("本类属性:") ; System.out.print(priv + " ") ; System.out.print(r.getName() + " ") ; // 得到属性类型 System.out.print(f[i].getName()) ; // 输出属性名称 System.out.println(" ;") ; } } { // 公共属性 Field f[] = c1.getFields() ; // 取得本类中的公共属性 for(int i=0;i<f.length;i++){ Class<?> r = f[i].getType() ; // 得到属性类型 int mo = f[i].getModifiers() ; // 得到修饰符的数字 String priv = Modifier.toString(mo) ; // 还原修饰符 System.out.print("公共属性:") ; System.out.print(priv + " ") ; System.out.print(r.getName() + " ") ; // 得到属性类型 System.out.print(f[i].getName()) ; // 输出属性名称 System.out.println(" ;") ; } } }};
- java中的反射三(反射机制深入---获得类的结构)
- java中的反射三(反射机制深入---对类的操作)
- java中的反射三(反射机制深入---工厂设计模式)
- java中的反射三(反射机制深入---对数组的操作)
- 利用JAVA中的反射机制获得某个类的信息
- JAVA反射机制 检查类的结构
- java中的反射三(反射机制深入---静态代理,动态代理及cglib动态代理)
- Java反射机制之获得其他类中的所有属性
- JAVA基础 (三)反射 深入解析反射机制
- 21天精通java基础之Day19通过反射机制获得类的完整结构
- 深入讨论Java语言中的反射机制
- 深入理解java中的反射机制
- 【Java反射机制】_Java反射机制的深入研究笔记
- 【Java反射机制】_Java反射机制的深入研究笔记
- Java中的反射机制(三) 利用反射访问私有
- Java中的类反射机制
- Java中的类反射机制
- Java中的类反射机制
- 用VC资源动态链接库解决国际化问题
- java23种设计模式
- allowDefinition='MachineToApplication' 不同版本vs产生的问题
- iframe自适应高度
- 第五次上机实验
- java中的反射三(反射机制深入---获得类的结构)
- 向上滚动的图片跑马灯,无间隙!!!
- 第五次上机报告
- Unity 3D--获取ios平台下路径
- 请求发送者与接收者解耦——命令模式(二)
- widget layout设计(设置minWidth和minHeight),保证最小,剩下由系统来拉伸(成若干格)
- 海量数据处理:十道面试题与十个海量数据处理方法总结
- 函数调用下形参和实参的内存分配
- android 布局随笔