Class.forName()
的重载版本有什么用?
public static Class<?> forName(String name,
boolean initialize,
ClassLoader loader)
throws ClassNotFoundException
任何人都可以举出一个优先使用的例子。
修改
参考下面的代码。
Class clz=(Class)Class.forName("com.test.classloader.MyClass", false, Thread.currentThread().getContextClassLoader());
MyClass mc=(MyClass) clz.newInstance();
System.out.println(mc.TEST);
System.out.println(mc.i);
MyClass的:
public class MyClass {
static String TEST="MYCLASS";
static int i;
static{
i=20;
}
}
为什么打印
MYCLASS
20
答案 0 :(得分:1)
如果要加载Class
并使用ClassLoader
参数传递的特定loader
,则可以使用此方法。
如果你想要初始化类,initialize
布尔值也会说明。
非常简单。
答案 1 :(得分:0)
初始化是指是否在此时调用静态块。
如果您使用任何静态字段或方法,则必须调用静态块,以免看到该行为。
您可以做的是在静态块和示例中添加调试输出,以查看它们被调用的顺序。 (或者在静态块中添加一个例外)