【JAVA】レッスン2-08:エラーメッセージを読めるようになろう

記事内に商品プロモーションを含む場合があります

この記事で学べる知識:エラーメッセージ

この記事の練習問題で使用する知識:
基礎構文(レッスン1)、比較演算子と論理演算子分岐処理(if文)分岐処理(switch文)繰り返し処理(for文)繰り返し処理(while文)繰り返しの制御配列エラーメッセージ例外処理の基礎

<<前のページ 問題集Top 次のページ>>

JAVAの「エラーメッセージ」とは

この章ではJAVAにおける「エラーメッセージ」の意味や使い方を学習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Javaプログラムを実行する際に、プログラムが意図した通りに動作しなかったり、実行が中断される場合、エラーメッセージが表示されます。

エラーメッセージは問題の原因を示す重要な手がかりです。

初心者の段階ではエラーメッセージの内容に戸惑うことも多いですが、よくあるエラーメッセージの原因を理解することで、エラーへの対処がしやすくなります。

以下に、代表的なエラーメッセージを5つ紹介します。

Cannot find symbol(シンボルが見つかりません)

このエラーメッセージは、変数やメソッド、クラスの名前がJavaで認識できない場合に表示されます。

主な原因としては、スペルミス、変数やメソッドの宣言が漏れている、または適切なインポートが行われていないことが挙げられます。

例えば変数名を「count」と宣言していたのに「cunt」として使用すると、このエラーが発生します。

int count = 5;
System.out.println(cunt); // Cannot find symbolエラー

NullPointerException(ヌルポインタ例外)

このエラーはnullの値を持つオブジェクトを操作しようとした際に発生します。

nullとは何も参照していない状態を意味します。

例えばオブジェクトを初期化せずにメソッドを呼び出そうとした場合や、配列の要素がnull(空)のままでアクセスしようとした場合に発生します。

String text = null;
System.out.println(text.length()); // NullPointerExceptionエラー

ArrayIndexOutOfBoundsException(配列インデックスが範囲外です)

配列の要素にアクセスする際、指定したインデックスが配列の範囲外である場合に表示されるエラーメッセージです。

例えば5つの要素を持つ配列に対してインデックス6でアクセスしようとすると、このエラーが発生します。

int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers[5]); // ArrayIndexOutOfBoundsExceptionエラー

ArithmeticException(算術例外)

算術演算の途中でエラーが発生した場合に表示されます。特に整数型のゼロ除算(10 / 0)でよく見られるエラーです。

浮動小数点型(doublefloat)でのゼロ除算はInfinityやNaN(Not a Number)として処理されますが、整数型ではエラーになります。

int result = 10 / 0; // ArithmeticExceptionエラー

ClassNotFoundException(クラスが見つかりません)

実行時に指定したクラスが見つからない場合に発生するエラーです。

クラスパス(Javaがクラスファイルを探す場所)が正しく設定されていない場合や、指定したクラスファイルが存在しない場合に見られます。

特に外部のライブラリを利用する際に設定ミスがあると、このエラーが表示されることがあります。

// エラー例
java.lang.ClassNotFoundException: com.example.MyClass

以上がJavaのプログラミングにおいて初心者が頻繁に遭遇するエラーメッセージとその原因の解説です。

エラーメッセージの内容を読み解き、原因に注目することで、問題の特定と解決がしやすくなるでしょう。

練習問題2-8:エラーメッセージを見てコードを修正しよう

以下のコードをコピーして実行してみましょう。

そうすると複数のエラーが発生しますので、表示されるエラーメッセージを参考にしてエラー箇所を特定し、正しいコードを書きましょう。

public class ErrorExamples {

    public static void main(String[] args) {
        
        System.out.println(count);

        String text = null;
        System.out.println(text.length());

        int[] numbers = {1, 2, 3};
        System.out.println(numbers[ 3]); 

        int a = 10;
        int b = 0;
        int result = a / b;
        System.out.println(result);
    }
}




解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

public class ErrorExamples {

    public static void main(String[] args) {
        
        // 1. Cannot find symbol エラー
        String count = "Cannot find symbolエラー";
        System.out.println(count);
        // 解説:count変数は宣言されていなかった、Cannot find symbolエラーが発生しました。

        // 2. NullPointerException エラー
        String text = "NullPointerException エラー";
        System.out.println(text.length());
        // 解説:textがnullだったので、そのメソッドlength()を呼び出すとエラーが発生しました。

        // 3. ArrayIndexOutOfBoundsException エラー
        int[] numbers = {1, 2, 3};
        System.out.println(numbers[ 2]);
        // 解説:配列numbersのインデックスは0から2までしかないため、3番目にアクセスするとエラーになりました。

        // 4. ArithmeticException エラー
        int a = 10;
        int b = 1;
        int result = a / b;
        System.out.println(result);
        // 解説:整数のゼロ除算はArithmeticExceptionを引き起こします。
    }
}

正解コードの解説

非常にシンプルなコードのため解説はありません。

難しいと感じる方は上記の用語の説明を見返してみてください。

<<前のページ 問題集Top 次のページ>>

この記事への質問・コメント

この記事を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    JAVAテキスト&問題集へ戻る
    トップページへ戻る