了解反射,什么是反射,学习反射
反射【重点】
反射原理
1. 获取Class类对象
static Class forName(String className);
通过Class类名调用,是一个static修饰的静态方法,传入的参数是一个完整的包名.类名
例如:
Demo1 ==》 com.qfedu.a.Demo1
该方法有异常抛出 ClassNotFoundException
Class 类名.class
通过指定的类名调用,获取类对应的属性
Class 类对象.getClass();
通过类对象,获取对应当前类对象的class, Class类对象
2. 获取Constructor类对象
Constructor[] getConstructors();
获取当前类内所有非私有化构造方法Constructor数组
Constructor[] getDeclaredConstructors();
获取当前类内的所有构造方法Constructor数组,包括私有化构造方法
Constructor getConstructor(Class... initParameterType);
根据指定的参数类型,获取指定的非私有化构造方法类对象, Constructor
Class... 首先这里要求的数据类型是Class类对象,而且当前参数的个数不确定
可以不传入参数,也可以传入多个Class类型的参数。
Constructor getDeclaredConstructor(Class... initParameterType);
根据指定的参数类型,获取指定的构造方法类对象,包括私有化构造方法。
Class... 这里是一个不定长参数,需要的参数类型是Class类对象,个数不限!!!
Object newInstance(Object... initParameter);
通过Constructor类对象调用,传入参数是当前构造方法,创建对象所需的实际参数。
3. 获取Method类对象
Method[] getMethods();
获取当前类内所有的非私有化成员方法,包括从父类继承而来的可以在子类使用的成员方法
Method[] getDeclaredMethods();
获取当前类内的所有方法,但是不包括从父类继承而来方法
Method getMethod(String methodName, Class... parameterTypes);
获取类内指定方法名和参数类型的非私有化成员方法
String methodName: 指定的方法名字
Class... parameterTypes 当前方法参数类型的Clas类对象,不定长参数
Method getDeclaredMethod(String methodName, Class... parameterTypes);
获取类内指定方法名和参数类型的成员方法,包括私有化方法
String methodName: 指定的方法名字
Class... parameterTypes 当前方法参数类型的Clas类对象,不定长参数
Object invoke(Object obj, Object... args);
Object obj 调用当前方法的类对象
Object... args 执行当前方法需要的实际参数列表
4. 获取Field类对象
Field[] getFields();
获取当前类内的所有非私有化成员变量类对象,返回的是一个Field类型数组
Field[] getDeclareFields();
获取当前类内的所有成员变量,包括私有化成员变量,返回的是一个Field类对象数组
Field getField(String fieldName);
通过指定成员变量的名字。获取指定的成员变量类对象,但是不能获取私有化成员变量
Field getDeclaredField(String fieldName);
通过指定的成员变量名字。获取指定的成员变量类对象,而且可以获取私有化成员变量
void set(Object obj, Object value);
Object obj 是操作当前成员变量的类对象
value 是给予当前成员变量的值
Object get(Object obj);
Object obj 指定获取哪一个类对象中成员变量数据
给予暴力反射操作权限
void setAccessible(boolean)
暴力反射获取的内容,默认情况下类外没有操作权限,如果调用当前方法,传入参数为true,
就可以使用暴力反射内容