反射
1概念:是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意属性和方法;
这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
2获取 Class对象的三种方法
Class.forName(全类名)方法
类名.class属性
对象名.getClass()方法
通过获取的Class对象就可以调用方法获取构造方法,成员变量和成员方法
3获取构造方法
(1)Class类中用于获取构造方法的方法
Constructor<?>[] getConstructors() 返回所有公共构造方法对象的数组
Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象的数组
Constructor<T> getConstructor(Class<?>... parameterTypes) 返回单个公共构造方法对象
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回单个构造方法对象
(2)Constructor类用于创建对象的方法
T newInstance(Object...initargs) | 根据指定的构造方法创建对象
setAccessible(boolean flag) | 设置为true,表示临时取消访问检查
3.获取成员变量
(1)Class类中用于获取成员变量的方法
Field[] getFields() 返回所有公共成员变量对象的数组
Field[] getDeclaredFields() 返回所有成员变量对象的数组
Field getDeclaredField(String name) 返回单个成员变量对象
Field getField(String name) 返回单个公共成员变量对象
(2)Field类中用于创建对象的方法
void set(Object obj, Object value) 赋值
Object get(Object obj) 获取值
4获取成员方法
(1)Class类中用于获取成员方法的方法
Method[] getMethods() 返回所有公共成员方法对象,包括继承的所用公共方法
Method[] getDeclaredMethods() 返回所有成员方法对象,不能获取继承的
Method getMethod(String name, Class<?>... parameterTypes) 返回单个公共成员方法对象 Method getDeclaredMethod(String name, Class<?>... parameterTypes) 返回单个成员方法对象
(2)Method类中用于创建对象的方法
Object invoke(Object obj, Object... args) 运行方法