上級のJavaエラー 50問
17種類のエラーを、それぞれ3パターンずつ収録しています。
- unreported exception must be caught の原因と直し方検査例外と非検査例外の境界。throwとthrowsの違い、catchできない型の条件を扱います。
- Map と HashMap を両方importする理由インターフェースと実装クラスは別物です。受け口を広く、実体を具体的にという原則を扱います。
- raw type とワイルドカードの使い分け型引数を省くと型安全が失われます。List<Object>とList<?>の違いも整理します。
- @Override が通らないときの確認手順名前・引数・可視性の3点が一致条件です。オーバーロードとの違いを実例で確認します。
- equals と hashCode を必ずセットで実装する理由HashSetやHashMapが先にハッシュ値で振り分けるためです。引数をObjectにする理由も扱います。
- is not abstract and does not override の原因と直し方抽象メソッドの実装漏れ。extendsとimplementsの使い分け、可視性の制約も扱います。
- cannot assign a value to final variable の原因と直し方finalが固定するのは参照であって中身ではありません。final / static final の違いを整理します。
- コンストラクタとメソッドの見分け方戻り値型を書くとただのメソッドになります。既定コンストラクタが消える条件も扱います。
- super() と this() の呼び出しルール必ず先頭に置く必要があります。親に引数なしコンストラクタがない場合の対処を扱います。
- finally の return が結果を上書きする問題finallyでreturnを書いてはいけない理由と、try-with-resourcesによる安全なリソース解放を扱います。
- オートボクシングで起きる NullPointerExceptionIntegerはnullを持てますが、演算時にintへ開封されます。Map.getの戻り値の受け方を扱います。
- Integer の == が 127 までしか動かない理由-128〜127のキャッシュが原因です。たまたま動く挙動に依存する危険性を扱います。
- static フィールドの初期化順序宣言順に初期化されます。static初期化ブロックとインスタンス初期化ブロックの違いも扱います。
- 可変長引数の制約とオーバーロード優先順位最後の引数にしか置けません。通常のオーバーロードが優先される順序も解説します。
- local variables must be final or effectively final の原因と直し方ラムダが参照するローカル変数は再代入できません。配列で回避する定石も扱います。
- stream has already been operated upon の原因と直し方Streamは1回しか終端操作できません。中間操作の遅延評価も合わせて解説します。
- default メソッドの衝突と解決複数のインターフェースから同名を継承すると衝突します。A.super.name() による明示的な選択を扱います。