6

Java では、Class.forName は null を返すことができますか?それとも、クラスが見つからない場合は常に ClassNotFoundException または NoClassDefFoundError をスローしますか?

4

4 に答える 4

12

Java Docs は、クラスが見つからない場合は ClassNotFoundException をスローすると言っているので、null を返すことはないと思います。

于 2009-01-09T23:09:22.513 に答える
5

null はこのメソッドのドキュメントのどこにも言及されておらず、メソッドが例外をスローする代わりに null を返すことが理にかなっている状況はないように思われるため、それを想定するのはかなり安全だと思いますnull を返すことはありません。

NoClassDefFoundError はスローされませんが、ClassNotFoundException がスローされる場合があります。

于 2009-01-09T23:09:09.473 に答える
0

デフォルトのクラス ローダーを使用すると、null を受け取ることはありません。ただし、jdigital が言うように、使用しているセキュリティ モデルまたは他のタイプのプロキシ ローダーに応じて、任意の数のカスタム クラスローダーの影響を受ける可能性があります (意図的またはその他の方法で)。

一体、 forName でさえ ClassLoader をパラメータとして取ることができます... :)

ピコ

于 2009-01-10T00:29:17.003 に答える
-2

@Dan Dyer は間違っています。Class.forName は、試行中のクラスがその静的イニシャライザで ClassNotFoundException エラーを取得した場合にをスローできます。NoClassDefFoundError以下はウンテ

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

于 2009-01-10T03:13:39.197 に答える