FC2ブログ

スポンサーサイト

-------- --:--:-- --

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Java】ClassNotFoundException と NoClassDefFoundError の違い

2010-09-04 21:56:09 Sat

ClassNotFoundException と NoClassDefFoundError の違いは、要は Exception と Error の違いでしかありません。

■Exceptionとは?

Java では、プログラムを実行する最中に発生するエラーを 例外(exception)として扱うことができます。例外には例えば、0で割り算をした、メモリが枯渇した、存在しないファイルを開こうとしたなどがあります。
引用元
javaリファレンス

■Errorとは?

絶対に起きてはならない異常な状態。
javaリファレンス

基本的には上述のような定義となります。
後述のものは少し強引な分け方ですが、初めはそのように覚えておいてもよいのではないでしょうか。

Exception は、アプリケーションが検知するべきアプリ的な例外を指し示します。アプリケーション実行時に起きうるものです。
Error は、アプリケーションが検知すべきではない JVM(実装であるC)での例外を指し示します。

■ClassNotFoundException
アプリケーションが、クラスの文字列名を使用して次のメソッドでロードしようとしたが、指定された名前のクラスの定義が見つからなかった場合にスローされます。
http://www3.ea.u-tokai.ac.jp/~sakata/jdk5/docs/ja/api/java/lang/ClassNotFoundException.html

■NoClassDefFoundError
通常のメソッド呼び出し、あるいは new 式を使った新しいインスタンスの生成で、Java 仮想マシンまたは ClassLoader インスタンスがクラス定義をロードしようとしたが、クラス定義が見からない場合にスローされます。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/NoClassDefFoundError.html

■ClassNotFoundException と NoClassDefFoundError
ClassNotFoundException は、アプリケーションの参照先 JAR がさらに外部JAR を参照していたがその外部JAR はクラスパス上に設定せずにJavaアプリケーションを実行していた、といったときに起こりえます。
NoClassDefFoundError は、Javaアプリケーション実行時に指定したメインクラスがそもそもクラスローダ上に存在しない場合にスローされます。
Javaアプリケーションが一度正常に起動したあとでアプリケーション実行時にクラスが参照できない場合、NoClassDefFoundError とはならずに ClassNotFoundException となります。
Javaアプリケーションの実行前のクラスロード時でのクラスが検索できない例外は NoClassDefFoundError となり、Javaアプリケーションの実行後のクラスロードでのクラスが検索できない例外は ClassNotFoundException となります。
そういった違いはあるのですが、基本的には同質の例外であることを理解しておき、どのみちクラスパス設定のミスであるので、クラスパスを見直して解決することを心がけてください。

スポンサーサイト

⇒comment

Secret

名言集
全記事(数)表示
全タイトルを表示
ブログ内検索
Loading
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。