,元数据,字节码和符号引用验证等
准备: 为类中的静态变量分配内存并设置为当前数据类型的零值,例如: static int a=10 ,但是这里只会赋予零值,即a=0
解析: 将常量池内的符号引用替换为直接引用...初始化: 执行类构造器中的代码,这里类构造器client方法是编译器自动收集类中的所有静态变量的赋值动作和静态语句块中的语句合并而成的,在这里a会被赋值为10。...类加载详细参考此文
----
区别
new关键字和Class.forName使用的类加载器是相同的,都是当前类加载器,即应用程序上下文加载器
classLoader.loadClass()方法是由用户指定类加载器进行加载...,如果需要在当前类路径以查询并加载类,只能采用该方式
还有一点: 前两种方式都是静态加载,而最后一种方式是动态加载
静态加载的时候如果在运行环境中找不到要初始化的类,抛出的是NoClassDefFoundError...,它在JAVA的异常体系中是一个Error;
动态态加载的时候如果在运行环境中找不到要初始化的类,抛出的是ClassNotFoundException,它在JAVA的异常体系中是一个
checked