エラーには、保存したときに Eclipse が赤い「×」で教えてくれる コンパイルエラー と、実行したときにコンソールに赤い文字で出る 実行時のエラー(例外) があります。この付録では、それぞれの読み方と、この教材でよく出るものの対処をまとめます。各章の「うまくいかないときは」も参照してください。
A.1 コンパイルエラーの読み方
Eclipse は、ファイルを保存するたびにコンパイルします。文法の間違いがあると、次の場所に印が付きます。
- エディターの行の左端に赤い「×」。マウスを合わせると理由が表示される
- 間違いのある部分に赤い波線
- パッケージ・エクスプローラーのファイル名・パッケージ名・プロジェクト名に赤い「×」
- 画面の下の「マーカー」ビューに一覧(「Java の問題」の左の「>」をクリックして開く)。ダブルクリックするとその行に飛ぶ

図A-1 コンパイルエラーの表示(赤枠:行の左の「×」と「マーカー」ビュー)
コンパイルエラーがあるクラスは実行できません。実行しようとすると、エラーがあるが起動を続行するかという確認が出ますが、「続行」を押しても、エラーのある行で止まります。先にエラーを直してください。
【便利な使い方】エラーは上から順に直す
; や } が1つ足りないだけで、その後ろの行にも次々とエラーが付くことがあります。いちばん上のエラーを直して保存すると、残りが消えることが多いです。理由の文が分かりにくいときは、エラーの行の 直前の行 も見てください。
A.2 よくあるコンパイルエラー
| 表示される理由 | 原因と対処 | 章 |
|---|---|---|
| 構文エラーがあります。";" を挿入して… | 文の終わりの ; が無い。半角の ; を付ける |
第3章 |
| 構文エラーがあります。"}" を挿入して… | ブロックを閉じる } が足りない。{ と } の数を合わせる |
第3章 |
| トークン "〇〇" に構文エラーがあります。このトークンを削除してください | 余分な記号や、全角の記号・空白が混ざっている。半角で書き直す | 第3章・第5章 |
| 文字列リテラルがダブル・クォートによって正しく閉じられていません |
" が片方しかない、または全角の ”。半角の " で囲む |
第3章 |
| 〇〇 を変数に解決できません | 宣言していない変数を使っている。名前の打ち間違い、大文字と小文字の違い、スコープの外(別のメソッドや for 文・try ブロックの外)で使っている |
第4章・第6章・第7章・第12章 |
| 〇〇 を型に解決できません | クラス名の打ち間違いか、import が無い。クラス名の末尾で Ctrl + Space を押して import を入れる |
第9章 |
| 〇〇 を解決できません |
System を system と書いたなど、クラス名の大文字・小文字の違い |
第3章 |
| 重複ローカル変数 〇〇 | 同じ名前の変数を2回宣言している。2回目は型を付けずに代入だけを書く | 第4章 |
| ローカル変数 〇〇 が初期化されていない可能性があります | 値を入れる前に変数を使っている。宣言と同時に値を入れる。switch で値を入れるときは default も書く |
第4章・第14章 |
| 型の不一致: 〇〇 から △△ には変換できません | 型の違う値を代入している(double を int に、String を int に など)。if (age = 27) のように == を = と書いたときも出る |
第4章・第5章 |
| 型 int のリテラル 〇〇 は範囲外です |
int に入らない大きな数。long にして末尾に L を付ける |
第4章 |
| final のローカル変数 〇〇 には代入できません |
final の定数に代入している。値を変えるなら final を外す |
第4章 |
| メソッド 〇〇(…) は型 △△ で未定義です | メソッド名の打ち間違いか、そのクラスにそのメソッドが無い。getter・setter の名前(getName)を確かめる |
第7章・第9章 |
| 型 △△ のメソッド 〇〇(…) は引数 (…) に適用できません | 呼び出しの引数の数・順番・型が、定義と合っていない | 第7章 |
| このメソッドは型 〇〇 の結果を戻す必要があります | 戻り値の型を書いたのに return が無い |
第7章 |
| void メソッドは値を戻すことができません |
void のメソッドで return 値; と書いている |
第7章 |
| 非 static フィールド 〇〇 を static 参照できません 型 △△ の非 static メソッド 〇〇(…) を static 参照することはできません |
main などの static なメソッドから、オブジェクトを指定せずにフィールドやメソッドを使っている。new で作ったオブジェクトの変数を付ける |
第8章 |
| コンストラクター 〇〇(…) は未定義です | 引数付きのコンストラクタを書いたクラスで new 〇〇() と書いた、または引数の型・数が違う |
第8章 |
| フィールド 〇〇 は不可視です メソッド 〇〇(…) は型 △△ で不可視です |
private のフィールドやメソッドを、別のクラスから使っている。getter・setter を使う。別のクラスから呼ぶメソッドには public を付ける |
第7章・第9章・第10章 |
| インポートされた 〇〇 は見つかりません |
import に書いたパッケージ名・クラス名が間違っている |
第9章 |
| 宣言されたパッケージ "〇〇" が、予想されているパッケージ "△△" に一致しません | ファイルの置き場所と package の行が合っていない |
第9章 |
| 型 △△ は継承された抽象メソッド 〇〇 を実装する必要があります |
implements したインターフェースのメソッドを書いていない |
第10章 |
| 型 △△ のメソッド 〇〇(…) はスーパータイプ・メソッドをオーバーライドまたは実装する必要があります |
@Override を付けたメソッドの名前や引数が、親のメソッドと違う |
第10章 |
| 処理されない例外の型 〇〇 | チェック例外を起こすメソッドを呼んでいる。この教材では使わないので、別のクラスを補完で選んでいないかを確かめる | 第12章 |
| 到達不能コード |
return や throw の後ろに文を書いている |
第12章 |
| public 型 〇〇 はそれ独自のファイル内に定義されなければなりません | クラス名とファイル名が違う。クラス名を直すか、ファイル名を変える(右クリック → リファクタリング → 名前変更) | 第9章 |
A.3 実行時のエラーの読み方
実行したときにコンソールに赤い文字で出るのが、例外の スタックトレース です(第12章)。
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "ch08.Employee.print()" because "e4" is null
at ch08.Main.main(Main.java:18)
- 1行目の
Exceptionで終わるクラス名で、何が起きたか を知る(NullPointerException) - 1行目の
:の後ろで、詳しい原因 を知る("e4" is null) -
atの行のうち、自分のパッケージ名で始まる いちばん上の行 で、どこで起きたか を知る(Main.javaの 18 行目)。リンクをクリックすると、その行に飛ぶ
A.4 よくある実行時のエラー
| 例外 | 原因と対処 | 章 |
|---|---|---|
NullPointerExceptionCannot invoke "…" because "〇〇" is null
|
変数 〇〇 が null のまま、メソッドやフィールドを使った。その変数に値を入れている場所を確かめる。because the return value of "…" is null なら、メソッドが null を返している(findByEmpId で見つからない、setter を呼んでいない など) |
第8章・第12章 |
ArrayIndexOutOfBoundsExceptionIndex 3 out of bounds for length 3
|
要素が3つの配列に添字 3 でアクセスした。添字は 0 から「要素の数 − 1」まで。for 文の条件は i < 配列.length
|
第6章 |
ArithmeticException/ by zero
|
整数を 0 で割った。割る数が 0 にならないかを if で確かめる |
第12章 |
NumberFormatExceptionFor input string: "abc"
|
数に変えられない文字列を Integer.parseInt に渡した。try〜catch で受け止めるか、渡す文字列を確かめる |
第11章・第12章 |
IllegalArgumentException |
引数の値が正しくないときに、メソッドが自分で起こした例外。メッセージを読んで、渡した値を確かめる | 第12章 |
| プログラムが終わらない(コンソールに「<終了>」が付かない) |
while の条件がいつまでも true(無限ループ)。コンソールの赤い終了ボタンで止め、繰り返しの中で条件に使う変数を変えているかを確かめる |
第6章 |
A.5 Eclipse の操作でのつまずき
| 症状 | 原因と対処 |
|---|---|
| 実行しても前の結果のまま変わらない | 保存していない。エディターのタブの「●」が消えているかを確かめる(第2章) |
| 実行ボタンを押したら、別のクラスが実行された | 実行ボタンは、エディターで開いている(または選んでいる)クラスを実行する。実行したいクラスをエディターで開くか、右クリックして「実行 → Java アプリケーション」を選ぶ(第2章) |
| 右クリックメニューに「実行 → Java アプリケーション」が無い、または「選択にはメイン型が含まれていません」と表示される | そのクラスに public static void main(String[] args) が無い。main のあるクラスを右クリックする(第3章) |
クラスを作ったら「パッケージ」の欄が空で、package の行が無い |
src やプロジェクトを右クリックして作った。クラスを削除し、入れるパッケージを右クリックして作り直す(第3章) |
「新規 Java プロジェクト」の JRE の一覧に JavaSE-17 が無い |
Pleiades の Full Edition でない可能性がある。「開発環境の準備」の「Pleiades のダウンロード」 の手順で Full Edition をダウンロードし直す |
| 補完(Ctrl + Space)で候補が出ない | 日本語入力がオンになっている(画面右下の「あ」)。半角/全角 キーでオフにする。コメントや文字列の中では補完は効かない |
| コンソールの日本語が文字化けする | プロジェクトの文字コードの設定が違う。Pleiades の既定は UTF-8 で、この教材の手順どおりなら化けない。プロジェクトを右クリック → プロパティー → リソース の「テキスト・ファイル・エンコード」が UTF-8 かを確かめる |
| エディターのタブが増えすぎた | タブを右クリック → 「すべて閉じる」。開き直すには、パッケージ・エクスプローラーでファイルをダブルクリックする |
| 画面の配置が崩れた、ビューが消えた | メニューの ウィンドウ → パースペクティブ → パースペクティブのリセット(「開発環境の準備」の「画面を使いやすく整える」) |
Eclipse の操作の一覧は、付録B「Eclipse 操作早見表」 にまとめています。