目次

代表的エラーとエラーメッセージの読み方

エラーメッセージの読み方

ソースコードに間違いがあるとエラーメッセージが表示されコンパイルは中止されます。

エラーメッセージはコンパイラが解釈できなくなった時点で作られるので、メッセージが指摘する所より前に間違いがあって、それを引きずって別のところでエラーになることもありますし、いくつかの可能性の中からひとつだけメッセージを取り出しますから指摘が正しいとは限りません。

でもどこが違っているかを見つけだす重要な手がかりになります。

自分がミスし易いところは、決まったパターンのメッセージがでますので何度もやっていればすぐに気がつくようになります。いくつか例をあげて解説します。

例1

間違いを含んだプログラムです。

ファイル名 Hello.java

public class Hallo { 
       public static void main( String[] args ) {
               System.out.println("Hello World!");
       } 
}

コンパイルでエラーがでました。

$ javac Hello.java[Enter]
Hello.java:1: クラス Hallo は public であり、ファイル Hallo.java で宣言しなければなりません。
public class Hallo { 
       ^
エラー 1 個
$ 
Hello.java:1
エラーがあったソースファイル名とエラーがあった行
クラス Hallo は public であり、ファイル Hallo.java で宣言しなければなりません。
エラーの内容。指摘が的確でない場合もあります。
public class Hallo {
エラーあった行の内容
^
エラーあった箇所。だと思ってください。ただしコンパイラが解釈できなくなった場所を指すので,もっと前が間違っている場合もあります。
エラー 1 個
エラーの数。

class Hello と書くべき所を,class Hallo と綴りを間違えたものです。ファイル名が Hello.java なので class Hello でなければなりません。

でも,class Hallo が間違いでなく,ファイル名が Halo.java となるべきなのかもしれません。コンパイラはそこまでは判断できないのです。

例2

Hello.java:2: <identifier> がありません。
   public statik void main( String[] args ) {
                ^
エラー 1 個
Hello.java:2
エラーがあったソースファイル名とエラーがあった行
<identifier> がありません。
エラーの内容。指摘が的確でない場合もあります。
public statik void main( String[] args ) {
エラーあった行の内容
^
エラーあった箇所。だと思ってください。ただしコンパイラが解釈できなくなった場所を指すので,もっと前が間違っている場合もあります。
エラー 1 個
エラーの数。

static と書くべき所を,statik と綴りを間違えたものです。「<identifier> がありません。」というメッセージは的確とは言えませんが identifier は日本語では識別子。クラス、変数、メソッドなどの名前のことです。

例3

Hello.java:3: \12288 は不正な文字です。
      System.out.println("Hello World!");
     ^
エラー 1 個

パターンが同じなので各行の意味は省略。

\12288 は文字に割り当てられた番号(UTF-16の十進表記)で、全角スペースのことです。 の所には見えませんけど全角スペースが入っていて、ここにあってはいけない文字ということです。半角スペースにしなければいけません。

例4

Hello.java:3: ';' がありません。
      System.out.println("Hello World!")
                                        ^
エラー 1 個

パターンが同じなので各行の意味は省略。

これはメッセージが的確。そのままです。ただ文脈によっては、次の行の先頭に が付くこともあります。その場合、前の行だと気づくことができるでしょうか。

例5

Hello.java:3: シンボルを見つけられません。
シンボル: メソッド printIn(java.lang.String)
場所    : java.io.PrintStream の クラス
      System.out.printIn("Hello World!");
                ^
エラー 1 個
Hello.java:3
Hello.java の 3 行目
シンボルを見つけられません。
変数やメソッドの名前が定義されていない(多くの場合未定義なものをつかったり綴りが間違っている)
シンボル: メソッド printIn(java.lang.String)
コンパイラはprintIn(java.lang.String)をメソッドだと思って探したが、なかった。
場所 : java.io.PrintStream の クラス
メソッドは必ずなんらかのクラスに所属するがそのクラス名。printInの前にSystem.outとあることからこのクラスに所属しているはずと判断している。
System.out.printIn("Hello World!");
次の^と共にprintInの場所を示す。
エラー 1 個
エラーの総数

println と書くべき所を,printIn と綴りを間違えたものです。b小文字の(L:エル)と大文字の(I:アイ)は区別が付きにくいものです。


Javaプログラミング(Feb.2009)
聖愛中学高等学校
http://www.seiai.ed.jp/
Aug.2003 初稿?