2009-01-09 73 views

回答

9

Java Docs表示如果找不到類,它會拋出ClassNotFoundException,所以我會說它永遠不會返回null。

5

因爲在這個方法的文檔中沒有提到null,並且因爲似乎沒有任何情況會讓方法返回null而不是引發異常,所以我認爲它很安全假定它從不返回空值。

它不會拋出NoClassDefFoundError,但它可能會拋出ClassNotFoundException。

+0

爲什麼不扔一NCDFError? – Phil 2009-01-09 23:17:08

+0

它已經拋出ClassNotFoundException異常,如果兩者都使用它會引起混淆。當VM在正常操作過程中找不到類時,VM引發NoClassDefFoundError。當使用反射的代碼找不到類時,會引發ClassNotFoundException。 – 2009-01-10 00:39:58

+0

這並不完全正確。 Class.forName確實會拋出NCDFE,請參閱下面的回覆。 – 2009-01-10 03:20:16

0

使用默認的類加載器,當然你不會收到空值。但是,正如jdigital所說,根據您可能使用的安全模型或其他類型的代理加載器(有意或無意),您可能會受到任意數量的自定義類加載器的約束。

哎呀,甚至能的forName採取一個ClassLoader作爲參數... :)

Piko的

-2

@丹代爾是錯誤的,的Class.forName 可以NoClassDefFoundError,如果類是試圖在其靜態初始化程序中發生ClassNotFoundException錯誤。如果您編譯並在沒有其他文件的目錄運行這個你ClassNotFoundException: Inner

現在,添加以下內容在同一目錄下,編譯一切,java Outer一次,來看看它運行以下是unte

class Outer { 
    public static final void main(final String[] args) throws Exception{ 
    Class.forName("Inner"); 
    } 
} 

好。

class Inner { 
    static Inner2 _i2 = new Inner2(); 
} 

class Inner2 {} 

最後,刪除Inner2.class並重新運行外,你得到NoClassDefFoundError: Inner2caused by ClassNotFoundException: Inner2

相關問題