こんにちは、かつコーチです。
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, 初心者向け, エラー解決