在Java中,Class.forName可以返回null吗?

在Java中,Class.forName是否会返回null,或者如果找不到类,它是否会抛出ClassNotFoundException或NoClassDefFoundError?

Java Docs表示,如果无法找到类,它将抛出ClassNotFoundException,所以我会说它永远不会返回null。

由于在这个方法的文档中没有提到null,并且因为似乎没有任何情况使得该方法返回null而不是抛出exception是有意义的,我认为假设它是非常安全的永远不会返回null。

它不会抛出NoClassDefFoundError,但它可能抛出ClassNotFoundException。

使用默认的类加载器,您肯定不会收到空值。 但是,正如jdigital所说,根据您可能正在使用的安全模型或其他类型的代理加载器(有意或无意),您可能会受到任意数量的自定义类加载器的限制。

哎呀,即使是forName也可以将ClassLoader作为参数…… 🙂

PIKO

@Dan Dyer错误,Class.forName 可以抛出NoClassDefFoundError ,如果它正在尝试的类在其静态初始化器中获得ClassNotFoundException错误。 以下是unte

 class Outer { public static final void main(final String[] args) throws Exception{ Class.forName("Inner"); } } 

如果您在没有其他文件的目录中编译并运行它,则会得到ClassNotFoundException: Inner

现在将以下内容添加到同一目录中,编译所有内容并编译java Outer一次,看它运行正常。

 class Inner { static Inner2 _i2 = new Inner2(); } class Inner2 {} 

最后,删除Inner2.class并重新运行Outer,你得到NoClassDefFoundError: Inner2caused by ClassNotFoundException: Inner2