【個人用】Java Silver SE11 試験対策メモ

# はじめに

Java Silver SE11の勉強中で[この問題集](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5Java-SE-11-Silver%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-815/dp/4295007625)をやってます。
振り返り用としてにQiitaに、自分の苦手箇所などをまとめる感じです。

# 第一章

特になし

# 第二章

- アンスコの使い方
    - リテラルの**先頭**と**末尾**はダメ
    - 記号の前はダメ
- 識別子のルール
    - 予約語はダメ
    - **アンスコ**と**ドル**は使っていい
    - 数字からはダメ
- varの使い方
    - nullや初期値なしはダメ
    - 初期化子ダメ
    - ローカル変数にしか使えない
    - varの型推論はコンパイル時に実施される
- StringBuilderの使い方
    - 保持している文字列＋余分のバッファを持ち、デフォルトで16文字のバッファを持っている

# 第三章

- 型変換について
    - 大きい範囲の型から小さな変数に代入するときは、明示的なキャストが必要
    - 数値リテラルはデフォルトで特定の型をもっている
        - 整数の数値リテラル：int型
        - 浮動小数点数：double型
- 同一性と同値性
    - 同一性
        - 同じインスタンスであること
        - ==演算子で判定する
    - 同値性
        - 同じ値であること
        - equalsメソッドで判定する
        - equalsメソッドはオーバーライドして使う（Object.equalsは同一性を見ているため）
- Stringについて
    - new 演算子を使った場合は新しいインスタンスが作られる
    - internメソッドは、コンスタントプールを含むメモリ内の文字列を探して、再利用するためのメソッド
- Switch文について
    - 条件式について
        - 使える型
            - int型以下の整数型とそのラッパークラス
            - 文字と文字列
            - 列挙型
        - 使えない型
            - ブーリアン
            - long、Long、doubleなどなど

# 第四章
- for文について
    - 初期化文
        - 複数の変数を宣言可能
        - 変数は同じ型
    - 条件式
        - 複数条件にしたい場合は論理演算子を使う
    - 更新文
        - 複数記述可能
- ラベルについて
    - ラベルのメリット
        - breakやcontinueの時に制御を移す箇所を自由に指定できる
    - ラベルを付けられる箇所
        - コードブロック
        - すべてのループ文と分岐
        - 式
        - 代入
        - return文
        - tryブロック
        - throw文

# 第五章
- 配列インスタンスと要素の値について
    - 配列をnewで宣言した際は、配列インスタンスが作られる
    - 要素の中身を作るには、初期化子や値を代入しないとけいない
- 配列の要素のデフォルト値
    - オブジェクト型：null

# 第六章
- staticなメンバーについて
    - staticなメソッドから、staticではないメンバーにアクセスできない
    - staticではないメソッドから、staticなメソッドにアクセスできる
- メソッドの呼び出しと戻り値について
    - 戻り値を戻すメソッドであっても、必ずその結果を受け取る必要はない
- オーバーロードについて
    - オーバーロードとは、
        - 同名のメソッドを複数定義できる機能のこと
    - オーバーロードの条件、
        - 引数の数や型、順番が異なること
        - 戻り値の型が異なるだけではオーバーロードと判定されない
        - アクセス修飾子が異なってもオーバーロードと判定されない
- コンストラクタと初期化子について
    - 初期化子は、コンストラクタが実行される前に実行される
    - static変数などを初期化したい場合は、static初期化子を使う
- アクセス修飾子に関して、
    - UMLや図を書いて、どのパッケージにあるかやアクセス修飾子をまとめるとわかりやすい
- カプセル化について
    - フィールドは公開し、アクセスするためのメソッドを公開する
    - セッターとメンバ変数はprivate、ゲッターをpublic

# 第七章
- インターフェースのデフォルトメソッド
    - デフォルトメソッド
        - 実現クラスが持つべきデフォルトの実装を定義できるもの
        - `java.lang.Object`クラスをオーバライドするとコンパイルエラーになる
        - オーバーライドしたデフォルトメソッドを呼び出すには、`インターフェース名.super.メソッド名()`と記載する。呼べるのは親クラスのみ。親の親はダメ

# 第八章
- ラムダ式について
    - ラムダ式の構文
        - 中かっこあり
            - 複数の処理を記述できる
            - 戻り値を戻すにはreturnが必要
        - 中かっこなし
            - 一つしか処理をかけない
            - 戻り値を戻すにはreturnを省略（書いちゃダメ）
    - アクセスできる範囲
        - ラムダ式外で宣言されたローカル変数にラムダ式からアクセスできるが、実質的にfinalな変数出ないとダメ（宣言後に更新されたらダメ的な？）
- 関数型インターフェースと特徴
    - Consumer<T>
        - メソッド：void accept
        - 引数を受け取って処理をする。結果を戻さない引数の「消費者」
    - Supplier<T>
        - メソッド：get()
        - 何も受け取らず結果だけ返す「供給者」
    - Predicate<T>
        - メソッド：boolean test
        - 引数を受け取ってそれを評価する「述語」
    - Function<T,R>
        - メソッド：R apply
        - 引数を受け取って、指定された型の結果を戻す「処理」

# 第九章
- LocalDateクラスの特徴
    - 不変なオブジェクト
    - 月は１から始まる
    - 日付を操作するメソッドが追加されている
- ArrayListについて
    - addメソッド
        - list.add(2,"b")のように位置を指定できる
    - setメソッド
        - list.set(0,"a")のように指定した位置の値を書き換える
    - removeメソッド
        - リストから要素を削除する
        - 削除対象が複数ある場合は、equalsメソッドで最初にヒットするもの
        - 中間の値を削除した場合、後ろの要素が繰り上がる（for文で注意）
        - removeメソッド後に読み出しをすると例外がスローされる（スレッドセーフではないため）
- Arraysクラスについて
    - mismatchメソッド
        - 引数で渡された2つの配列の要素を先頭から順番に比較し、一致しない要素番号を返す
    - compareメソッド
        - 2つの配列を辞書順に並べたときの並び順を比較する
        - 第一引数が第二引数よりも辞書順で先なら負の値、後なら正の値（例：

# 第十章
- try-catch-finally
    - 順番を変えるとコンパイルエラーになる
    - returnするときは戻り値を格納する専用の変数が用意されているとイメージする
- try-with-resources
    - 以下の順で処理される
        - リソースの解放
        - catch句の処理
        - finally句の処理
- 検査例外と非検査例外
    - 検査例外
        - Exceptionクラスのサブクラス（RuntimeExceptionとそのサブクラスを除く）
        - 検査例外はtry-catch or throwsを強制される
    - 非検査例外
        - RuntimeExceptionとそのサブクラス
        - 非検査例外はtry-catchを強制されない

# 第十一章
- module-info.javaでは以下の2点を記載する
    - どのパッケージを公開するか（exports）
    - どのモジュールを利用するか（requires）
- モジュールの実行について
    - 以下の構文で実行したいモジュールを実行する
        - java --module-path モジュールのルートディレクトリ -m 実行したいモジュールのクラス
    - モジュールに含まれるクラスを実行するには、モジュール名と実行したいクラスの完全修飾クラス名の間をスラッシュで区切る
        - java --module-path mods -m hello/com.sample.Main



# わかりやすい記事
https://qiita.com/mizu4my/items/579e2c69fde35d41a146