------- android培训、java培训、期待与您交流! ------……
反射就是java 自我管理类和对象的一个机制。
反射是通过Class类来实现的。
java将磁盘类文件加载到内存中,为一个实例,这个对象时Class的实例。
每一个类在内存中都有独一无二的字节码,虚拟机通过字节码加载类区别不同类。
有三种方法获得类的字节码:
一: Class a = string.class;
二: Class b = “abd”。getclass();
三:Class c = forName(“java。lang。string”);
当获得Class类的对象后,可以通过 newInstance()方法获得反射类的实例对象。需要注意的是被实例化对象的类中必须有一个无参的构造方法。
当类中没有无参的构造的方法时候可以通过getConstructors()获得类的所有构造方法
反射的功能可以获得类中完整的结构。可以通过java。lang。reflect。包中的 Constructor,Field,Method类来实现。
获得类的全部接口:getInterface()方法获得一个Class类的对象数组,可以通过getName()得到名字
获得父类: getSuperclass()
一:获得全部构造方法:class c = …………; constructior co【】 = c。getConstructors(); co【i】。getModifiers() 取出权限。
class p【】 = co【i】。getParameterType() 取得构造方法中的参数类型
二:获得全部方法:
Method me【】 = c。getMethods();
获得返回值类型 me【i】。getReturnType();
获得全部参数类型 me【i】。getParameterType()
三:获得全部属性:
Field f【】 = c。getDeclaredFields();
f【i】。getType() 获得属性类型
通过反射调用类中的方法:
Method m = c。getMethod(方法名);
m。invoke(c。newInstace());必须传入一个类的实例
如果方法有参数: method m = c。getMethod(方法名,参数类型);
m。invoke(c。newInstance(),参数)
反射操作数组:
int arr【】 = {34,25,14,4,}
Class a = arr。getClass()。getComponentType();
………………………………………………(a。getName())
system。out。print(Array。getLength(arr))
…………………………………………(Array。get(arr,2))
Array。set(arr,2,56) 改变下标2的数组值