¶概览
大致含义
- JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
- Java反射机制在框架设计中极为广泛,需要深入理解。
想要深刻了解反射需要学习JVM,在后面会进行补充,现在只需要知道大致的原理即可
解释
简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而 Java 反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。
反射的核心是 JVM 在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。
功能
在运行时判断任意一个对象所属的类;
- 在运行时构造任意一个类的对象;
- 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
- 在运行时调用任意一个对象的方法
类加载器
定义
是负责将磁盘上的某个class文件读取到内存并生成Class的对象。
java类的生命周期
生命周期(lifeCycle): 从创建到销毁的整个过程
- 人的生命周期: 儿童, 少年, 青年, 老年, 尸体
- 源码(source -> src) : Demo.java (源码)
- 编译(compile -> javac) : Demo.class (字节码)
运行(runtime -> rt) : Demo.class (Class对象)
jvm中的工具
图解
**源码 -> 编译 -> 运行**<br />** 编译器 类加载器**
编译器(compiler): 将java源码编译成java字节码
- 例如:javac Demo.java -> Demo.class
- 类加载器(classLoader):将java的字节码加载到内存中,jvm会根据java的字节码生成对应的Class对象
- Class对象
- 程序中使用了某个类,类加载器会自动开始加载这个类
- 类加载器在运行时,将这个类字节码文件加载到内存中,jvm会根据此字节码创建对应的Class对象
- Class对象是类在运行时的表示:例如Class d = Demo.class;