反射
凡是操作Class对象的都是基于反射.
简介
反射可以在程序运行时期获取到一个类的成员变量,成员方法,构造方法等并进行使用.
反射操作的是Class类型的对象,通过这个Class类型的对象获取到类中的成员变量,构造方法,成员方法等信息.
获取
1.对象实例.getClass()
2.类名.Class()
3.Class.forName(String className)
注意:一个类只有一个Class类型对象,无论怎么获取,获取到的都是同一个Class.
所有的数据类型都有class属性,包括基本类型.
Class中常见方法
获取类名:
– getName() 获取类的名字(全限定名)
– getSimpleName() 获取简单的类名(不含包名,不是全限定名)
获取成员变量:
– getFields() 获取类中所有的成员变量
– Field getField(成员变量名字) 获取指定的成员变量
set(Object obj, Object value) obj 给哪个对象的成员变量设置值 value 设置成什么值.
get(Object obj) 获取哪个对象该成员变量的值
获取构造方法:
– getConstructors() 获取类中所有的构造方法
– getConstructor(该有参构造所需参数) 获取一个类中指定的构造方法
获取成员方法:
– getMethods() 获取类中所有的成员方法
– Method getMethod(方法名,该方法参数列表) 获取指定方法对象!!!
Method表示成员方法
Object invoke(object obj , Object… args) 动态代理的灵魂. 方法对象!!!
获取实例对象:
– newInstance() 创建实例对象(默认使用空参构造创建对象)
– newInstance(有参构造所需参数) 创建实例对象
反射步骤
1.获取类的Class对象。
2.通过Class对象获取类的内容(成员变量,构造方法,成员方法)。
3.使用这个内容。