Java Class.forName失败

时间:2011-04-27 11:33:11

标签: java reflection

我似乎无法让Class.forName(String)拒绝ClassNotFoundException。例如,此代码是code directly from Sun's website的缩短副本会引发异常。

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:A

我在Windows XP SP3上使用Eclipse 1.3.2.20110218-0812。有谁知道我错过了什么?

4 个答案:

答案 0 :(得分:12)

您必须将Test类的包名称添加到A,例如,如果Test位于“test”包中,则需要执行以下操作:

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

答案 1 :(得分:1)

您的代码段对我来说很好。

以下是ideone.com上的演示:http://ideone.com/IBjKl

请注意,您需要为类加载器提供类的完全限定名称才能找到它。即,如果A实际上在某个包中,则需要forName("your.package.A")才能使其正常工作。

(请注意,导入是不必要的。)

答案 2 :(得分:1)

Class.forName函数需要完全指定的类路径。因此,即使您已从ArrayList导入java.util,也应使用:

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

这是你的问题。

答案 3 :(得分:0)

为此,您需要在类路径中使用名为“A”的类