Java の実行時例外について

Suraj P 2023年10月12日
  1. Java の java.lang.RuntimeException を理解する
  2. java.lang.RuntimeExceptionjava.lang.Exception の違い
  3. まとめ
Java の実行時例外について

この記事では、Java の java.lang.RuntimeException について学習します。

Java の java.lang.RuntimeException を理解する

Java ランタイム例外は、プログラムの実行中に発生する一種の例外です。 これらは通常、ゼロ除算や範囲外の配列インデックスへのアクセスなどのプログラミング エラーが原因で発生します。

開発者が処理することを意図したチェック済み例外とは異なり、実行時例外は予期しないものと見なされるため、メソッドのシグネチャで明示的にキャッチまたは宣言する必要はありません。

Java の最も一般的な実行時例外の 1つは NullPointerException です。これは、アプリケーションがメソッドを呼び出したり、null オブジェクト参照のフィールドにアクセスしようとしたときに発生します。 これは、開発者がオブジェクトの初期化を忘れた場合、またはオブジェクトに null 値が割り当てられた場合に発生する可能性があります。

別の一般的な実行時例外は ArrayIndexOutOfBoundsException です。これは、アプリケーションがその配列の有効な範囲外の配列インデックスにアクセスしようとしたときに発生します。 これは、開発者が配列のサイズを誤って計算した場合、またはループが大きすぎるインデックスを使用して配列を反復処理した場合に発生する可能性があります。

開発者は、これらの例外やその他の実行時例外の原因を理解し、コード内で例外が発生しないようにする必要があります。 これは、慎重なテストとデバッグ、およびコード分析ツールなどのツールを使用して潜在的な問題を特定することで実行できます。

一般に、実行時例外はプログラムのバグの兆候と見なされ、発見されたらすぐに修正する必要があります。 開発者は、予期しない状況を適切に処理できる堅牢で信頼性の高いコードを記述するよう常に努力する必要があります。

理解を深めるために、小さな例を見てみましょう。

public class RuntimeExceptionExample {
  public static void main(String[] args) {
    // Example of a NullPointerException
    String str = null;
    System.out.println(str.length()); // this will throw a NullPointerException

    // Example of an ArrayIndexOutOfBoundsException
    int[] numbers = new int[5];
    System.out.println(numbers[5]); // this will throw an ArrayIndexOutOfBoundsException

    // Example of an ArithmeticException
    int x = 5;
    int y = 0;
    System.out.println(x / y); // this will throw an ArithmeticException
  }
}

上記の例では、str 変数が null であり、length() メソッドが呼び出されるため、NullPointerException がスローされます。

2 番目の例では、配列番号に 5つの要素しかなく、6 番目の要素にアクセスしようとしているため、ArrayIndexOutOfBoundsException がスローされます。 3 番目の例では、ゼロで除算しようとしているため、ArithmeticException がスローされます。

実際には、これらの例を適切に処理し、例外がスローされないようにする必要があることに注意することが重要です。 たとえば、最初の例では、length メソッドを呼び出す前に null ポインタ チェックを実行する必要があります。

public class RuntimeExceptionExample {
  public static void main(String[] args) {
    // Example of a NullPointerException
    String str = null;
    if (str != null)
      System.out.println(str.length());
    else
      System.out.println("String is null");

    // Example of an ArrayIndexOutOfBoundsException
    int[] numbers = new int[5];
    if (numbers.length > 5)
      System.out.println(numbers[5]);
    else
      System.out.println("Array index is out of bound");

    // Example of an ArithmeticException
    int x = 5;
    int y = 0;
    if (y != 0)
      System.out.println(x / y);
    else
      System.out.println("Cannot divide by zero");
  }
}

アプリケーションのクラッシュを防ぐために、これらの例外を適切に処理することが重要です。

それでは、多くの開発者が混乱する一般的な場所の 1つである java.lang.RuntimeExceptionjava.lang.Exception の違いを見てみましょう。

java.lang.RuntimeExceptionjava.lang.Exception の違い

Java では、java.lang.RuntimeExceptionjava.lang.Exception はどちらも、プログラムの実行中にスローされる可能性のある例外のタイプです。 ただし、両者にはいくつかの重要な違いがあります。

  1. チェックされているものとチェックされていないもの: java.lang.Exception はチェックされた例外です。つまり、コンパイラーは、プログラマーがそれを処理するか、throws 句で宣言する必要があります。 一方、java.lang.RuntimeException は未チェックの例外です。つまり、コンパイラはプログラマがこれを処理する必要はありません。

  2. エラーの種類: java.lang.Exception は通常、入出力操作の問題や環境の問題など、外的要因に起因するエラーを表します。 一方、java.lang.RuntimeException は通常、null ポインター例外や不正な引数など、プログラミング エラーに起因するエラーを表します。

  3. 使用: java.lang.Exception は通常、発生が予想され、何らかの方法で処理できる例外的なケースに使用されます。 たとえば、ファイルを読み取っているとき、ファイルが存在しない可能性があると予想し、それに応じて FileNotFoundException を処理します。

    一方、java.lang.RuntimeException は、通常、発生することが予期されておらず、処理できないプログラミング エラーに使用されます。 たとえば、null ポインター例外はプログラミング エラーの結果であり、通常の操作では発生しないはずであり、処理することはできません。

  4. 継承: java.lang.RuntimeExceptionjava.lang.Exception のサブクラスであるため、実行時例外はすべて例外です。 ただし、すべての例外が実行時例外というわけではありません。

要約すると、java.lang.RuntimeException はプログラミング エラーを表す例外の一種であり、プログラマが処理する必要はありませんが、java.lang.Exception はプログラマが処理できる例外的なケースを表します。

まとめ

結論として、java.lang.RuntimeException は Java のプログラミング エラーを表す例外の一種です。 これらのエラーは通常、null ポインター例外、無効な引数、またはインデックスの範囲外エラーが原因で発生します。

プログラマーが必要とするチェック例外とは異なり、実行時例外は処理する必要がなく、例外がスローされるとプログラムは終了します。

Java プログラムでスローできる例外のタイプは実行時例外だけではないことに注意することが重要です。堅牢で信頼性の高いコードを作成するには、checked 例外と unchecked 例外の両方に精通していることが重要です。

これらの例外を処理するには、try-catch ブロックを使用することをお勧めします。これにより、プログラムはプログラムを終了する前に例外をキャッチして処理できます。

著者: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

関連記事 - Java Exception