Class.forName()的重载版本的Java用例

时间:2012-06-15 07:38:49

标签: java reflection overloading

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

2 个答案:

答案 0 :(得分:1)

如果要加载Class并使用ClassLoader参数传递的特定loader,则可以使用此方法。

如果你想要初始化类,initialize布尔值也会说明。

非常简单。

答案 1 :(得分:0)

初始化是指是否在此时调用静态块。

如果您使用任何静态字段或方法,则必须调用静态块,以免看到该行为。

您可以做的是在静态块和示例中添加调试输出,以查看它们被调用的顺序。 (或者在静态块中添加一个例外)