七、调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用。代码如下:
public class MyTest12 {
public static void main(String[] args) throws ClassNotFoundException {
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class<?> clazz = loader.loadClass("com.lxl.jvm.CL");
System.out.println(clazz);
System.out.println("-----------------------");
clazz = Class.forName("com.lxl.jvm.CL");
System.out.println(clazz);
}
}
class CL {
static{
System.out.println("CL loading");
}
}
结果:
class com.lxl.jvm.CL
-----------------------
CL loading
class com.lxl.jvm.CL
说明:
* 1、调用ClassLoader类的loadClass方法加载一个类,并不是对类的主动使用,不会导致类的初始化
* 2、反射是对类的主动使用,会导致初始化
再次补充
* 主动使用(7种)
* 1、创建类的实例
* 2、访问某个静态类或接口的静态常量,或者对该静态变量赋值
* 3、调用类的静态访问
* 4、反射
* 5、初始化一个类的子类
* 6、JAVA虚拟机启动被称标明为启动类的类
* 7、jdk1.7开始提供的动态语言支持