在java中如果一个类收到类加载请求,它不会自己直接去加载,而是把请求委派给父类的加载器,直到启动类加载器。只有父类加载器无法加载时,子类才会尝试自己加载。
主要将class文件的字节流读入到jvm中生成class对象
通过全限定名获取到文件二进制字节流 把静态存储结构(文件)转化为方法区的运行时数据结构(jvm内存) 最终生成一个class对象
jvm常量池的符号应用换为直接引用 在类的加载过程中的解析阶段,Java虚拟机会把类的二进制数据中的符号引用 替换为 直接引用,如Worker类中一个方法:
public void gotoWork(){ car.run(); //这段代码在Worker类中的二进制表示为符号引用 }在Worker类的二进制数据中,包含了一个对Car类的run()方法的符号引用,它由run()方法的全名和相关描述符组成。在解析阶段,Java虚拟机会把这个符号引用替换为一个指针,该指针指向Car类的run()方法在方法区的内存位置,这个指针就是直接引用。
1.使用new实例化这个类时 2.调用类静态方法时 3.读取/设置类变量时 3.使用反射Class.forName(“xxx”) 进行反射调用时 4.标为启动类 5.子类被初始化时