Java 反射机制 I
反射机制
java中的所有数据类型都是对象或者基础类型,如果将交互的数据用来创建对象,即在不修改源码的情况下,来控制程序;
- 反射机制允许程序在执行期间借助于Reflection API 获取任何类的内部信息【五大成员变量】;
- 加载完类之后,在堆中产生了一个Class类型的对象【一个类只有一个Class对象】,这个对象包含了这个类的完整结构信息,通过这个类可以得到这个类的完整结构信息;
java 程序的三个阶段
- 编译阶段;
- Runtime 运行阶段;
- Class 类阶段【类加载阶段】:类加载器加载
- 成员变量:Field[] fields;
- 构造器:Constructor[] constroctor;
- 成员方法:Method[] method;
反射主要的类:Class【类加载后在堆中的对象】, Method, Field, Constroctor;
- 不能获取私有的成员变量;
- 方法 setAccessible() 方法可以启动和禁止访问安全检查的开关,以提高反射效率;
Class 类:
- Class也是类,因此也继承了Object类;
- Class类的对象不是new 出来的,而是由系统创建;
- 【类加载器加载】:传统的对象通过 new 由ClassLoader的loadClass()方法,仅只加载一次;
- 反射:由Class的forName()也会进入到ClassLoader的loadClass()方法;
- 对于某个类的Class对象,在内存中仅有一份,且类只加载一次;
- 每个类的实例都会记得自己是由哪个Class实例所构成;
- 通过Class对象可以得到一个类的完整结构;
- Class对象是存放在堆的;
- 类的加载,除了对应Class类的生成,还有类的字节码二进制数据【包括方法代码,变量名,方法名,访问权限】,是存放在方法区的;

浙公网安备 33010602011771号