Java SE11 Silverの学習 03
インタフェースや抽象クラスは実装されていないので、newでインスタンスを生成できない。
継承関係にあるクラスのインスタンス生成時のコンストラクタの動作について
・スーパークラスのインスタンスが持つコンストラクタが先に実行される
・サブクラスのコンストラクタには、スーパークラスのコンストラクタを呼び出す
「super();」コンパイラによって先頭行に追加される
中カッコありだと複数の処理を記述できる。1つしか処理が無い時は中カッコ省略ができる。
中カッコありで戻り値を戻すにはreturnが必要
中カッコなしで戻り値を戻すにはreturnをつけない、つけるとコンパイルエラー
APIの話
ArrayListの特徴、nullと重複を許容し、スレッドセーフではないので高速なコレクションである。
add, set, removeなどのメソッドを使う。setは要素を置き換えるので注意。
removeメソッドは、条件に一致する最初の要素のみ削除するので注意。
固定長のlist生成の仕方
var list = List.of(1, 2, 3);
↑このofメソッドでListを生成すると、後から変更できない!
黒本では模擬テストの中に、これを問う問題が2つあった。
list.add(4); とか書いてあったらコンパイルはできるが実行時エラー
var list = Arrays.asList(new Integer[] {1, 2, 3});
2つ覚えておく。
Arraysのmismatchメソッドは、一致しない最初の要素の添字を返す。全て一致する場合は-1を返してくる。
Arraysのcompareメソッドは、2つの配列の辞書順を調べる。2つの配列が等しい場合は0
を返す。第1引数が第2引数よりも辞書順で先なら負の値、逆なら製の値を戻す。
ジェネリクスって何?
JavaやC#の入門書には、大体書いてあるジェネリクスという機能。そもそもジェネリクスって何なん?ていう疑問を無視したまま説明が進んでいくことが多い気がするので、一応メモ。
型が混在しないようにするために、型を指定することによって、コレクションが扱える型を制限する機能のこと。Java SE5から導入された。
ArrayListで下記のように書く↓ <>の中に指定する型を書く。何も書かないとすべてのObject型を許容する。
ArrayList<String>list = new ArrayList<String>();
Java SE7からは型推論で、ダイヤモンド演算子<>を使って簡潔に書けるようになった。
ArrayList<String>list = new ArrayList<>();