【Java】よくあるコンパイルエラーの読み方を初心者向けに解説

Java

こんにちは、かつコーチです。
Javaを書き始めたばかりの頃、真っ赤なエラーメッセージを見て「何を言っているのか分からない」と手が止まった経験はありませんか。
今回は、初心者がつまずきやすいコンパイルエラー(ソースコードを.classファイルに変換する段階で発生するエラー)の代表例と、その読み方を整理します。

コンパイルエラーとは?実行前に見つかる間違い

実行時エラーとの違い

コンパイルエラーは、javacコマンドがソースコードを解析する段階で構文や型の誤りを検出したときに発生します。
一方、NullPointerExceptionのような実行時エラー(プログラムを動かしている最中に発生するエラー)はコンパイルには成功しているのが特徴です。

$ javac Main.java
Main.java:5: エラー: ';'がありません
        int x = 10
                   ^
1エラー

このように、コンパイルエラーは実行する前の段階で止まってくれるため、原因を見つけやすいという利点があります。

エラーメッセージの3つの構成要素

コンパイルエラーのメッセージは、次の3要素を読み取ると原因が特定しやすくなります。

  • ファイル名と行番号Main.java:5 の部分。エラーが発生した場所
  • エラー内容';'がありません のような具体的な説明
  • 矢印(^)の位置:エラーと判定された文字の位置

よくあるコンパイルエラー3選と対処法

セミコロン忘れ(’;’がありません)

初心者が最も遭遇しやすいのが、文末の;忘れです。

// ❌Before:セミコロンがない
int x = 10
System.out.println(x);
Main.java:2: エラー: ';'がありません
int x = 10
           ^
// ✅After:文末にセミコロンを付ける
int x = 10;
System.out.println(x);

エラー行番号は「セミコロンが必要だと判明した行」を指すため、実際の間違いは1行前にあることも多い点に注意してください。

型の不一致(incompatible types)

変数の型と代入する値の型が合っていないときに発生します。

// ❌Before:intにString型を代入しようとする
int age = "20";
Main.java:1: エラー: 不適合な型: Stringをintに変換できません:
int age = "20";
              ^
// ✅After:適切な型に変換する、または正しい型で宣言する
int age = Integer.parseInt("20");
// もしくは
String age = "20";

incompatible types(不適合な型)というキーワードが出たら、まず代入している値とその変数の型を見比べる癖をつけましょう。

シンボルが見つからない(cannot find symbol)

変数名やメソッド名のスペルミス、宣言忘れ、スコープ外での参照で発生します。

// ❌Before:メソッド名のスペルミス
String name = "かつコーチ";
System.out.println(name.toUppercase()); // 正しくはtoUpperCase
Main.java:2: エラー: シンボルを見つけられません
System.out.println(name.toUppercase());
                        ^
  シンボル:   メソッド toUppercase()
  場所: タイプString の変数 name
// ✅After:正しいメソッド名に修正
System.out.println(name.toUpperCase());

cannot find symbol(シンボルを見つけられません)は、IDEの補完機能を使わずに手打ちしたときによく起こります。
IntelliJ IDEAなどのIDEを使っていれば、赤い波線で事前に警告されるため活用しましょう。

つまずいたポイント:一番上のエラーから直す

エラーが大量に出て混乱した話

私が初心者の頃、1つのタイプミスで20件以上のコンパイルエラーがずらっと表示され、パニックになったことがあります。

Main.java:3: エラー: シンボルを見つけられません
Main.java:5: エラー: シンボルを見つけられません
Main.java:7: エラー: シンボルを見つけられません
...(以下17件省略)

実際の原因は3行目の変数宣言のスペルミス1つだけで、それ以降のエラーは連鎖的に発生した副次的なものでした。
コンパイラは1つの誤りを解釈できないと、以降のコードの解釈も次々とずれてしまうためです。

対処法はシンプルで、一番上(一番若い行番号)のエラーだけを直してから再コンパイルすることです。
下の方のエラーは無視して構いません。再コンパイルすれば消えていることがほとんどです。

まとめ

この記事のポイント

  • コンパイルエラーは実行前に検出される誤りで、実行時エラーより見つけやすい
  • エラーメッセージは「ファイル名・行番号」「エラー内容」「矢印の位置」の3点を読む
  • ';'がありません不適合な型シンボルを見つけられませんが初心者三大エラー
  • 大量にエラーが出たら焦らず、一番上のエラーから順番に直す

次に読むべき記事

  • 実行時エラーの代表格は「NullPointerExceptionの防ぎ方」の記事へ
  • IDEでの効率的な原因特定は「デバッグの基本(IDEのブレークポイント)」の記事へ

タグ: Java, 初心者向け, エラー解決

タイトルとURLをコピーしました