Edited at

【Java】エラーメッセージをちゃんと読んでいますか?【スタックトレースの読み方】

More than 1 year has passed since last update.


はじめに

一生懸命書いたプログラムがエラーを吐いたとき、そのエラーメッセージをちゃんと読んでいますか?

「英語だからやだー:confounded:」って逃げていませんか?

そういえば、エラーの読み方って研修とかで教わらないような気がします。

エラーメッセージは全部英語ですが、ポイントさえ押さえればちゃんと解読できます。

(英語だからって)逃げない、向き合うの


エラーメッセージを読む順序

以下のエラーサンプルを使って、順を追って読んでいきましょう:notebook_with_decorative_cover:

※新人さん:beginner:向けの内容(のつもり)なので、ゆっくりペースでエラーを読んでいきますね。


サンプルプログラム.java

package section01;

import java.util.Random;

/*
* ランダム配列の生成
* オーダー:2Nパターン
*/

public class practice4 {

public static int NUM = 10;

public static void main(String[] args) {
int[] numArray = new int[0]; /* 要素数ゼロの配列を宣言している */
Random random = new Random();

int i, randomNum;
for(i = 0 ; i < NUM ; i++) {
numArray[i] = i; /* ここでexceptioが発生する */
}

for(i = NUM-1 ; i > 1 ; i--) {
randomNum = random.nextInt(NUM-1);
int tmp = numArray[randomNum];
numArray[randomNum] = numArray[i];
numArray[i] = tmp;
}

for(i = 0 ; i < NUM ; i++) {
System.out.println(Integer.toString(numArray[i]));
}
}
}



エラーサンプル

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

at section01.practice4.main(practice4.java:20)★


1)エラーメッセージのスタート地点までゆっくり戻る

エラーメッセージが一通り出力された状態では、カーソルが一番下まで下りています。

サンプルでいうと、(practice4.java:20)の次にある★の個所です。

なので、画面をスクロールして、エラーメッセージが出力されたスタート地点までゆっくり戻りましょう:arrow_left:慣れれば一気に戻れるようになります。

マウス:mouse_three_button:のホイールをぐりぐりしながら、全体像を見てください。

ちなみに、サンプルなので2行で終わってますが、フレームワークを使っているともっとたくさん出てきます:computer:


2)一番先頭にある「Exception」や「Error」の文字を探す

サンプルでいうとException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0の個所です。

他には、


  • NullPointerException

  • NumberFormatException

  • OutOfMemoryError

などなど。

これが、エラーの内容になります。

意味不明で構わないので、まずはException / Errorを探してください。

大事なのは、「意味わかんないけど、NullPointerExceptionっていうエラーが発生しているんだな」と認識することです。


3)動かしたプログラムのクラス名を探す

Javaに限らず、たいていのプログラミング言語は、エラーが発生した場所を「どのファイルの何行目か」って出力してくれます。

なので、まずは自分が動かしたプログラムのクラス名を探しましょう :exclamation:

サンプルだとat section01.practice4.main(practice4.java:20)の個所です。

ここまでくれば、


  • practice4.javaの20行目でエラーが発生している。

  • エラーの内容は「ArrayIndexOutOfBoundsException」である。

の2つがわかったので、practice4.javaの20行目で発生している、ArrayIndexOutOfBoundsExceptionを解消するようにプログラムを修正してください:stuck_out_tongue:

わからなければ、「○○のn行目で△△というexceptionが発生したのですが、どうやって解消すればいいですか?」って聞いてしまいましょう。


エラーメッセージの勘

毎回ググってると、だんだん覚えてくるので、毎回ググるようなことはなくなってきます。

そうすると、単語の一部を見ただけで「自分がどんな間違いをしているのか」という見当がつくようになってきます。

さらに、たいていのプログラミング言語 or SQLは、エラーメッセージに似たような英単語を使っていることが多いので、言語問わずある程度の推測が可能になります。

意味や読み方がわからなくてもエラーの内容がわかるようになりますよ:star: