2011-04-27 65 views
1

我似乎無法得到Class.forName(String)不扔ClassNotFoundException。例如,這個縮寫爲code directly from Sun's website的代碼會引發異常。Java Class.forName失敗

import java.lang.reflect.*; 
class A {} 

public class Test { 
    public static void main(String args[]) 
    { 
     try { 
     Class cls = Class.forName("A"); 
     } 
     catch (Throwable e) { 
     System.err.println(e); 
     } 
    } 
} 

主要生產

拋出java.lang.ClassNotFoundException:一個

我使用Eclipse 1.3.2.20110218-0812在Windows XP SP3。有誰知道我錯過了什麼?

+0

這爲我工作。根本沒有例外。 – 2011-04-27 11:36:41

+0

你如何運行它?也適用於我 – 2011-04-27 11:38:08

+0

可能通過讓Test不在默認包中,所以即使A剛好在Test上定義,對於類加載器它也必須是完全限定的,包括Test類的包名稱。 – 2011-04-27 11:48:43

回答

8

你必須預先設置測試類A的包名,因爲如果測試是在「測試」包的例子,你需要以下:

Class cls = Class.forName("test.A"); 
1

您的代碼段適合我。

這裏是ideone.com一個演示:http://ideone.com/IBjKl

請注意,您需要提供完全合格的名稱類的類加載器找到它的。也就是說,如果A實際上是在某些包中,則需要執行forName("your.package.A")才能工作。

(注意,在導入是不必要的。)

0

對於這個工作,你需要有名稱爲「A」類在classpath

1

Class.forName功能需要完全指定的類路徑。所以,即使你已經從java.util進口ArrayList你應該使用:

Class myClass = Class.forName("java.util.ArrayList"); 

那是你的問題。