Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのClassNotFoundExceptionとNoClassDefFoundErrorの違いは何ですか?


両方のClassNotFoundException およびNoClassDefFoundError 実行時にロード中にJVMまたはClassLoaderが適切なクラスを見つけることができない場合のエラーです。 ClassNotFoundException チェックされた例外であり、 NoClassDefFoundError チェックされていないエラーです。

ClassLoaderにはさまざまな種類があります 異なるソースからクラスをロードします。ライブラリJARファイルが見つからないか、クラスパスが正しくないため、ローダーが実行時にクラスをロードできない場合があります。

ClassNotFoundException

ClassNotFoundException Reflectionを使用して実行時にクラスをロードしようとしたときに発生します。これらのクラスファイルが見つからない場合は、 ClassNotFoundExceptionでアプリケーションまたはプログラムがスローされます。 例外。実行時にクラスをロードしているため、コンパイル時にチェックするものはありません。

public class ClassNotFoundExceptionTest {
   public static void main(String[] args) {
      try {
         Class.forName("Test");
      } catch (ClassNotFoundException cnfe) {
         System.err.println("You are trying to search for a class is not existing. "+cnfe);
      }
   }
}

出力

You are trying to search for a class is not existing. java.lang.ClassNotFoundException: Test


NoClassDefFoundError

NoClassDefFoundError クラスパスから特定のクラスを使用してクラスがコンパイルされたが、実行時に同じクラスが使用できない場合にスローされます。 JARファイルがないことが、 NoClassDefFoundErrorを取得する最も基本的な理由です。 。 Java APIのドキュメントによると、「検索されたクラス定義は、現在実行中のクラスがコンパイルされたときに存在していましたが、定義が見つかりません。」

class Test1 {
   public void show() {
      System.out.println("show() method called");
   }
}
public class Test2 {
   public static void main(String[] args) {
      Test1 t = new Test1();
      t.show();
   }
}

両方のクラスをコンパイルすると、2つのクラスファイル Test1.class が取得されます。 およびTest2.class、 Test2の実行中 クラスはTest1.classを削除するだけです ファイルを作成すると、 NoClassDefFoundErrorが発生します 以下のように

出力

Exception in thread "main" java.lang.NoClassDefFoundError: Test1
         at Test2.main(Test2.java:9)

  1. JavaのJFrameとJDialogの違いは何ですか?

    JFrame フレームに追加されたコンポーネントはそのコンテンツと呼ばれ、 contentPaneによって管理されます。 。 JFrameにコンポーネントを追加するには 、 contentPaneを使用する必要があります 代わりに。 JFrame タイトルのウィンドウが含まれています 、境界線 、(オプション)メニュー バー およびユーザー -指定 コンポーネント 。 JFrame 移動できます 、サイズ変更 、アイコン化 JComponentのサブクラスではありません 。 デフォルトでは、JFrameは左上の角に表示されます 画面のr。指定した場所にフレームを表示するには

  2. JavaのGridLayoutとGridBagLayoutの違いは何ですか?

    GridLayout すべてのコンポーネントを長方形のグリッドに配置し、同じサイズの長方形に分割します 各コンポーネントは長方形の中に配置されますが、 GridBagLayout 柔軟です レイアウト マネージャー コンポーネントを垂直方向と水平方向に整列させます コンポーネントが同じサイズである必要はありません。各GridBagLayout オブジェクトは、動的な長方形のセルのグリッドを維持します 各コンポーネントがコンポーネントと呼ばれる1つ以上のセルを占有します 表示 エリア 。 GridLayout GridLayout コンポーネントを長方形のグリッドに配置します。セル