ソースコードに間違いがあるとエラーメッセージが表示されコンパイルは中止されます。
エラーメッセージはコンパイラが解釈できなくなった時点で作られるので、メッセージが指摘する所より前に間違いがあって、それを引きずって別のところでエラーになることもありますし、いくつかの可能性の中からひとつだけメッセージを取り出しますから指摘が正しいとは限りません。
でもどこが違っているかを見つけだす重要な手がかりになります。
自分がミスし易いところは、決まったパターンのメッセージがでますので何度もやっていればすぐに気がつくようになります。いくつか例をあげて解説します。
間違いを含んだプログラムです。
public class Hallo { public static void main( String[] args ) { System.out.println("Hello World!"); } }
コンパイルでエラーがでました。
$ javac Hello.java Hello.java:1: クラス Hallo は public であり、ファイル Hallo.java で宣言しなければなりません。 public class Hallo { ^ エラー 1 個 $
class Hello と書くべき所を,class Hallo と綴りを間違えたものです。ファイル名が Hello.java なので class Hello でなければなりません。
でも,class Hallo が間違いでなく,ファイル名が Halo.java となるべきなのかもしれません。コンパイラはそこまでは判断できないのです。
Hello.java:2: <identifier> がありません。 public statik void main( String[] args ) { ^ エラー 1 個
static と書くべき所を,statik と綴りを間違えたものです。「<identifier> がありません。」というメッセージは的確とは言えませんが identifier は日本語では識別子。クラス、変数、メソッドなどの名前のことです。
Hello.java:3: \12288 は不正な文字です。 System.out.println("Hello World!"); ^ エラー 1 個
パターンが同じなので各行の意味は省略。
\12288 は文字に割り当てられた番号(UTF-16の十進表記)で、全角スペースのことです。^ の所には見えませんけど全角スペースが入っていて、ここにあってはいけない文字ということです。半角スペースにしなければいけません。
Hello.java:3: ';' がありません。 System.out.println("Hello World!") ^ エラー 1 個
パターンが同じなので各行の意味は省略。
これはメッセージが的確。そのままです。ただ文脈によっては、次の行の先頭に^ が付くこともあります。その場合、前の行だと気づくことができるでしょうか。
Hello.java:3: シンボルを見つけられません。 シンボル: メソッド printIn(java.lang.String) 場所 : java.io.PrintStream の クラス System.out.printIn("Hello World!"); ^ エラー 1 個
println と書くべき所を,printIn と綴りを間違えたものです。b小文字の(L:エル)と大文字の(I:アイ)は区別が付きにくいものです。