在Java中,Class.forName是否会返回null,或者如果无法找到类,它是否会抛出ClassNotFoundException或NoClassDefFoundError?
答案 0 :(得分:9)
Java Docs表示,如果找不到类,它将抛出ClassNotFoundException,所以我会说它永远不会返回null。
答案 1 :(得分:5)
由于在这个方法的文档中没有提到null,并且因为似乎没有任何情况使得该方法返回null而不是抛出异常是有意义的,我认为它是非常安全的假设它永远不会返回null。
它不会抛出NoClassDefFoundError,但它可能抛出ClassNotFoundException。
答案 2 :(得分:0)
使用默认的类加载器,您肯定不会收到空值。但是,正如jdigital所说,根据您可能正在使用的安全模型或其他类型的代理加载器(有意或无意),您可能会受到任意数量的自定义类加载器的限制。
哎呀,即使forName也可以将ClassLoader作为参数......:)
Piko的
答案 3 :(得分:-2)
@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: Inner2
,caused by ClassNotFoundException: Inner2