2011-04-27 43 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"); 

那是你的问题。