反射
类的加载:
当程序要使用某个类时,如果该类还未被加载到内存中,
则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。
1、加载:
就是指将class文件读入内存,并为之创建一个Class对象。
任何类被使用时系统都会建立一个Class对象。
2、连接:
验证 : 是否有正确的内部结构,并和其他类协调一致
准备 : 负责为类的静态成员分配内存,并设置默认初始化值
解析: 把类中的符号引用转换为直接引用
3、初始化:
通过构造方法
加载时机:
1、创建类的实例
2、访问类的静态变量,或者为静态变量赋值
3、调用类的静态方法
4、使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
5、初始化某个类的子类
6、直接使用java.exe命令来运行某个主类
类加载器:
负责将.class文件加载到内在中,并为之生成对应的Class对象
分类:
Bootstrap ClassLoader 根类加载器
Extension ClassLoader 扩展类加载器
Sysetm ClassLoader 系统类加载器
作用:
Bootstrap ClassLoader( 根类加载器)
也被称为引导类加载器,负责Java核心类的加载
比如System,String等。在JDK中JRE的lib目录下rt.jar文件中
Extension ClassLoader (扩展类加载器)
负责JRE的扩展目录中jar包的加载。
在JDK中JRE的lib目录下ext目录
Sysetm ClassLoader (系统类加载器)
负责在JVM启动时加载来自java命令的class文件,
以及classpath环境变量所指定的jar包和类路径
反射:
就是在运行状态中的一种动态调用方法或者属性的一种机制
(即获取字节码文件对象,然后剖析该类中存在哪些构造方法,哪些成员变量,哪些成员方法)
获取class文件对象的三种方式:
1、Object类的getClass()方法
2、静态属性class
3、Class类中静态方法forName()
例:
一、
public class test1 {
public static void main(String[] args) {
Student student = new Student(); s
//方式1 通过该方法,获取该类对应的字节码文件对象
Class aClass = student.getClass();
Class aC