中級のJavaエラー 53問
18種類のエラーを、それぞれ3パターンずつ収録しています。
- == と .equals() の違い(文字列比較)Java初学者が最も多く踏む罠。参照比較と値比較の違い、定数プール、null安全な書き方まで扱います。
- NullPointerException の原因と直し方nullに対する操作で発生します。発生箇所の特定方法と、そもそもnullを持ち回さない設計を扱います。
- ArrayIndexOutOfBoundsException の原因と直し方添字が0始まりであることの帰結です。ループ条件の < と <= の使い分けを整理します。
- 整数同士の割り算で小数が消える理由int / int はintで計算されます。キャストの位置による結果の違いを扱います。
- ArithmeticException: / by zero の原因と直し方int型同士の割り算・剰余算で分母が0だと例外になります。doubleとの挙動の違いと、事前チェックの書き方を扱います。
- NumberFormatException の原因と直し方parseIntは全体が数値でなければ失敗します。空白や記号が混ざる入力の扱い方を解説します。
- non-static variable cannot be referenced の原因と直し方staticとインスタンスの境界。mainから他のメンバーを呼ぶときの3つの選択肢を比較します。
- nextInt の後の nextLine が読み飛ばされる理由改行文字の読み残しが原因です。判定と読み取りの単位を揃える設計を扱います。
- char の演算と文字コードcharは演算するとintに昇格します。'0'を引く定番テクニックの仕組みも解説します。
- 0.1 + 0.2 が 0.3 にならない理由2進小数の限界です。誤差を許容する比較と、金額計算でBigDecimalを使う理由を扱います。
- Stringが不変であることの実害メソッドは新しい文字列を返すだけです。戻り値を捨てるミスと、StringBuilderの使いどころを扱います。
- ループが終わらない・空回りする原因カウンタ更新の忘れ、更新方向の誤り、forの直後のセミコロンという3パターンを扱います。
- switch で break を忘れるとどうなるか次のcaseへ落ちるフォールスルーの挙動と、defaultの役割、String switchの書き方を扱います。
- length / length() / size() の使い分け配列はフィールド、Stringはメソッド、コレクションはsize()。3種類を対比で覚えます。
- ClassCastException の原因と直し方キャストは宣言にすぎず、実体が違えば実行時に落ちます。instanceofによる事前確認を扱います。
- ConcurrentModificationException の原因と直し方ループ中のリスト変更で発生します。removeIf、Iterator、逆順ループの3つの解法を比較します。
- 値が変わらないときに疑う変数の隠蔽同名のローカル変数がフィールドを覆い隠します。コンストラクタでthis.が必要な理由を扱います。
- i++ と ++i の違い評価される値のタイミングが違います。i = i++ が何も変えない理由も解説します。