1、反射基本概念
2、动态语言和静态语言
3、反射功能
4、反射的简单使用
学反射前对象属性方法的调用
学反射后使用反射调用对象属性方法
注:
通过反射可以调用私有结构:
5、Class类的理解
由上面的反射构建的Class类的对象:
Class clazz = Person.class;
Person类加载到内存中,称为运行时类,这个类是Class的一个实例,又因为Person是关键字所以再后面加一个.class。
(Person.class是一个Class类的对象)
6、获取运行时类的四种方法
这四种方法获取的运行时类都是同一个。
7、哪些类可以有Class对象
只要数组的元素类型和维度一样,就是同一个Class
8、类的加载
最后两个输出null,因为无法获取引导类加载器
9、使用反射来创建对象。
Class clazz = Person.class;\先过去Person运行时类
Object obj = clazz.newInstance();\创建运行时类的对象
10、反射的动态性
在不知道具体创建谁的对象,只有在运行时才能知道,这样就避免了无法使用new来创建具体对象的问题了。
11、使用反射获取运行时类的属性
getFields获取属性(本类及其父类的public属性)。
getDeclaredFields获取当前运行时类所有声明的属性。(不包括父类)
获取属性的权限修饰符,数据类型,变量名。
11、使用反射获取运行时类的方法
与上面类似
获取方法的权限修饰符、返回值类型,方法名、、、、
12、使用反射获取运行时类的构造方法
14、获取运行时类的接口
15、
16、
17、使用反射操作运行时类对象的具体属性
私有的属性此方法还是不能获取
重点方法:可以获取私有属性,且进行修改。
注意:name.setAccessible(true)获取修改的权限
17、使用反射操作运行时类对象的具体方法
非静态方法:
invoke方法返回的就是对象具体方法的返回值,且必须有一个参数,指明方法的调用者(对象p)
静态方法:invoke不需要指定对象
18、使用反射操作运行时类对象的具体构造器