JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
java.lang.reflect,就是java反射的包,主要包括:Constructor、Field、Member、Method、Modifier、Type等类。
当然主要使用类的只有Constructor、Field、Method和java.lang.Class。
Constructor的主要方法:
1.public Constructor<?>[] getConstructors()
返回类中所有的public构造器集合,默认构造器的下标为0
2.public Constructor<T> getConstructor(Class<?>... parameterTypes)
返回指定public构造器,参数为构造器参数类型集合
3.public Constructor<?>[] getDeclaredConstructors()
返回类中所有的构造器,包括私有
4.public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
返回任意指定的构造器
Field的主要方法:
1.public Field getDeclaredField(String name)
获取任意指定名字的成员
2.public Field[] getDeclaredFields()
获取所有的成员变量
3.public Field getField(String name)
获取任意public成员变量
4.public Field[] getFields()
获取所有的public成员变量
Method的主要方法:
1.public Method[] getMethods()
获取所有的共有方法的集合
2.public Method getMethod(String name,Class<?>... parameterTypes)
获取指定公有方法参数1:方法名参数2:参数类型集合
3.public Method[] getDeclaredMethods()
获取所有的方法
4.public Method getDeclaredMethod(String name,Class<?>... parameterTypes)
获取任意指定方法
Class的主要方法:
1. public String getName()
一个Class对象描述了一个特定类的特定属性,而这个方法就是返回String形式的该类的简要描述
2. public T newInstance()
该方法可以根据某个Class对象产生其对应类的实例。需要强调的是,它调用的是此类的默认构造方法。例如:
MyObject x = new MyObject();
MyObject y = x.getClass().newInstance();
3. public ClassLoader getClassLoader()
返回该Class对象对应的类的类加载器
4. public native Class<?> getComponentType()
该方法针对数组对象的Class对象,可以得到该数组的组成元素所对应对象的Class对象。例如:
int[] ints = new int[]{1,2,3};
Class class1 = ints.getClass();
Class class2 = class1.getComponentType();
而这里得到的class2对象所对应的就应该是int这个基本类型的Class对象
5. public native Class<? super T> getSuperclass()
返回某子类所对应的直接父类所对应的Class对象
6. public native boolean isArray()
判定此Class对象所对应的是否是一个数组对象
总结:
java的反射机制就是增加程序的灵活性,避免将程序写死到代码里,现在学习的比较浅,无法去深入了解,等以后慢慢理解吧。