Class.forName
public static Class<?> forName(String className)
默认加载静态代码
public static Class<?> forName(String name, boolean initialize,
ClassLoader loader)
控制是否调用静态代码
Class.forName 只是让类加载,并没有初始化,最有调用newInstance的时候才初始化类,调用构造方法等。
如
package com.test;
public class TestClassFor {
static {
System.out.println("static method !");
}
public TestClassFor() {
System.out.println("Instance method !");
}
}
//main 方法
System.out.println("before forName");
Class c= Class.forName("com.test.TestClassFor");
System.out.println("after forName");
//result
before forName
static method !
after forName
相比ClassLoader.loadClass,loadClass的时候不会加载静态代码
一般只能调用一个参数的,两个参数的是受保护方法
public Class<?> loadClass(String name)
protected synchronized Class<?> loadClass(String name, boolean resolve)