1、静态语言和动态语言
- 静态语言 : 运行时结构不可变
- 动态语言 : 运行时,代码可以根据某些条件改变自己结构
- Java 依赖反射机制,可以看成是一门“准动态语言”
2、Java Reflection
- 反射机制运行程序在执行期间 借助Reflection API 去读取到类的内部信息,并且直接操作内部属性和方法
Class c= Class.forName("java.lang.String");
加载完类后,会产生一个Class 对象(一个类只有一个Class对象),我们通过这个Class对象查看到类的内部信息等等,就叫做:反射
3、Class类
JDK在Object类中提供一个方法交getClass 被所有的子类继承
public final native Class<?> getClass();
通过这个方法,可以获得一个Class类,这个类是Java反射的源头
- Class 本身也是一个类
- Class 对象只能由系统建立对象
- 一个加载的类在 JVM 中只会有一个Class实例
- 一个Class对象对应的是一个加载到JVM中的一个.class文件
- 每个类的实例都会记得自己是由哪个 Class 实例所生成
- 通过Class可以完整地得到一个类中的所有被加载的结构
4、反射获取到class的几种方式
比如我们创建一个Person对象,并且把他new 出来
Person person = new Person();
- 通过调用对象的getClass方法
Class class1 = person.getClass();
- 借助Class通过字符串获取(包名 + 类名)
Class class2 = Class.forName("com.zrd.Reflection.Person");
- 通过静态成员变量class 获取
Class class3 = person.class;
- 针对基本数据类型
Class class4 = Integer.TYPE;
- 获得父类的class
Class class5 = person.getSuperclass();