2010-12-09 110 views
1

我得到下面的编译错误:泛型类方法的forName

Tester.java:10: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown 
       Class stringClass = Class.forName("java.lang.String"); 

与此代码:

class Tester { 
    public static void main(String [ ] args) { 
     Class stringClass = Class.forName("java.lang.String"); 
    } 
} 

这是为什么?

+0

啊,你会喜欢检查异常。 – 2010-12-09 04:13:42

+1

让自己成为一个好的IDE,他们会为你解决这样的问题,比你自己输入的时间快。 – CurtainDog 2010-12-09 04:25:59

回答

0

当您使用Class.forName()时,您需要捕获或抛出在类路径中找不到该类时发生的异常。

这里的抛出异常(因为这是不可能的String不会被发现)

public static void main(String [ ] args) throws ClassNotFoundException 
{ 
    Class stringClass = Class.forName("java.lang.String"); 



} 

如果要为一类,可能无法在类路径中这样做,你应该环绕调用的例子与try...catch块。

+0

问题是类应该在类路径>,>上找到。字符串是一个已知的类 – Jake 2010-12-09 04:14:54

3

这既奇怪又有些模糊。是因为抛出的forName它必须赶上ClassNotFoundException的还是让它泡了堆栈...

class Tester{ 

    public static void main(String [ ] args) throws ClassNotFoundException 
    { 
     Class stringClass = Class.forName("java.lang.String"); 
    } 
} 

class Tester{ 

    public static void main(String [ ] args) 
    { 
     try { 
      Class stringClass = Class.forName("java.lang.String"); 
     } 
     catch (ClassNotFoundException e) { /* do something with it here */ } 
    } 
} 

这是所有真正检查的异常。