2012-06-15 22 views
0

重載版本Class.forName()有什麼用途?重載版本的Class.forName()的Java用例

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

javadoc對於這種方法來說相當不錯。你有看過嗎? – sp00m

+0

是的,但我的問題是布爾初始化。 – amicngh

回答

1

如果要加載您可以使用此方法與特定的ClassLoader,它通過loader參數傳遞。

另外,initialize布爾值將聲明您是否希望該類被初始化。相當簡單。

非常簡單。

+0

初始化是什麼意思?變量的初始化? – amicngh

+0

初始化是ClassLoading過程中的一個步驟(http://docs.oracle.com/javase/specs/jvms/se5.0/html/Concepts.doc.html#19075)。這是類變量設置爲默認值的地方。 – Jivings

+0

請參閱我更新的問題。 – amicngh

0

初始化是否在該點調用靜態塊。

如果您使用任何靜態字段或方法,您必須調用靜態塊,以免看到行爲。

你可以做的是在靜態塊和示例中添加一個調試輸出以查看它們被調用的順序。 (或者向靜態塊添加一個例外)

+0

我想他所問的是爲什麼當他指定類不是在'forName()'中被初始化時執行靜態塊。 – Jivings

+0

我以爲我回答了。 ;)它不是在'forName'中初始化的,而是在它可以被使用之前被初始化。 –