1度落ちてしまったので再受験する。直前の対策ように個人的に間違いやすいところをあげていく
復習用
オーバーライドとオーバーロード
- オーバーライド : メソッドを再定義すること、メソッドのシグネチャが同一・戻り値型が同一かサブクラス型・アクセス修飾子が同じか緩い
- オーバーロード : メソッドを多重定義すること、メソッド名は同じで、引数の数・型・順番を変える
メソッド、フィールドのアクセス
- メソッドはインスタンスの型で決まる
A foo = new foo(); foo.x() //xはfoo型 - メンバ変数は宣言する型で決まる
A foo = new foo(); foo.num //numはA型
instanceOf
クラス名やインターフェース名をつけると指定したオブジェクトが継承・実装関係にあるか調べる。右辺に変数宣言が書いてあったらパターンマッチングになる。instanceOfがtrueのときに変数にオブジェクトを代入する
equals()
- 文字列の値が等しいか判定する
- オブジェクトにもequals()は存在する。==と同じ働きをする
- 引数がnullの場合は必ずfalseを返す(ぬるぽにならない)
null.equals()はnullにメソッド呼び出しているのでぬるぽだけど
sealed継承
- sealed/non-sealed/finalのいずれか必須
final
- インターフェースやabstractの実装や継承が前提となっているクラスはfinalできない
throws throw
- throwsは例外を投げる宣言→メソッドの呼び出しもとに処理を任せる(外すとコンパイルエラーになるときはチェック例外)
- throwは例外を投げること
break continue
- breakは最も近いループを抜ける、ラベルの外側にも抜ける
- continueは次のループに行く
- switch文の中のbreakはswitchの外に行くだけ(switchのbreakとなる)
変数の初期化
- ローカル変数は自動初期化されない
- 未初期化の変数を使用 = コンパイルエラー
- フィールド変数は自動初期化される(int=0, boolean=false, 参照型=null)
インターフェースのメソッド修飾子
- 抽象メソッド: public または package-private(private不可)
- defaultメソッド: private可
- staticメソッド: private可
- インターフェースメソッドの衝突 → オーバーライドして明記必要
try-with-resources
- リソース変数は実質的final = 再代入不可
- AutoCloseableを実装している必要あり
- 複数リソースはセミコロンで区切る
キャスト
- ダウンキャスト: instanceofでチェック推奨
- キャスト先のインスタンスが違う → ClassCastException(実行時エラー)
- キャスト演算子は括弧で囲む:
((A)b).test()
switch式
- yieldで値を返す:
case x: yield y; - ブロック内で値を返すときに使用
varとジェネリクス
- varでArrayList宣言時、ジェネリクスの型指定必須
var list = new ArrayList<>();NGvar list = new ArrayList<String>();OK- 普段の宣言では、ローカル変数のみ・null禁止・初期化必須
コンストラクタ
- this(), super()はコンストラクタの最初にかく
- 両方一緒には使えない
static
- インスタンス生成がなくても使えるので->static以外の変数、メソッドは使えない
たまにbool(javaにこの宣言はない)とbooleanがある。引っかからないように
これで落ちたらブロンズから再出発すればいいや、と。気楽に