package test;
public class ClassLoaderTest {
static {
System.out.println("ClassLoaderTest is loaded");
}
public static void main(String[] args) throws ClassNotFoundException {
ClassLoader c = ClassLoaderTest.class.getClassLoader();
//只是类装的加载,加载进内存
c.loadClass("test.ClassLoaderTest$T");
// 类的装载
Class.forName("test.ClassLoaderTest$T");
T t1 =new T();
T t2 =new T();
}
static class T {
static {
System.out.println("T static is loaded");
}
{
System.out.println("T is loaded");
}
}
}
类装载的执行过程
加载
根据查找路径找到相应的class文件然后导入
验证
检查加载的class文件的正确性
准备
类准备阶段负责为类的静态变量分配内存,并设置默认初始值。
解析
虚拟机将常量池中的符号引用替换成直接引用的过程
初始化
对静态变量和静态代码执行初始化工作