2009-01-09 74 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

相关问题