JavaGold　自分用黒本メモ

### 1章
[java.util.Comparator](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Comparator.html)

- `compare`メソッドを持つ関数型インターフェース

  - o1がo2より小さい場合は負の整数を返す。
  - o1がo2と等しい場合はゼロを返す。
  - o1がo2より大きい場合は正の整数を返す。
```
Comparator<String> comparator = new Comparator<String>() {
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        };
```

- 　[List.sort()](https://docs.oracle.com/javase/jp/8/docs/api/java/util/List.html#sort-java.util.Comparator-)、[Stream<T>.sorted](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#sorted--)の引数で使用されている。



匿名クラスには名前がないため、コンストラクタは定義できない

staticメソッドは、インスタンスがなくても動作するのでオーバーライドできない

staticではないインナークラスには、
staticなフィールドやメソッドを定義できない

ローカルクラスから参照するローカル変数は、
実質的finalでなければいけない
　→そうではない場合はコンパイルエラー

### 2章
### 3章
newFixedThreadPool
あらかじめいくつかのスレッドを作って
プールしておき、時間の経過で不要な
スレッドを削除する

### 4章
- Optional.get は値が入っていることを前提としている
  → 値が空の場合は[java.util.NoSuchElementException](https://docs.oracle.com/javase/jp/8/docs/api/java/util/NoSuchElementException.html)がスローされる
- [Iterable.foreachの引数はConsumer型](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html)
```
  List<String> list = new ArrayList<String>();
  
  list.add("D");
  list.add("C");
  list.add("F");

  list.forEach((str) -> System.out.println(str));
```

- プリミティブ型配列から Streamを作る場合は
プリミティブ型のStream(IntStreamなど)を使用する
- ラッパー型のリストからparallelStreamを作る場合は
戻り値はStream<ラッパー型>になる
- 終端操作を２つ以上実行した場合
実行時に[IllegalStateException](https://docs.oracle.com/javase/jp/8/docs/api/java/lang/IllegalStateException.html)がスローされる

-  Stream.reduce()
引数が1個の場合は戻り値Optional
引数が2個の場合は戻り値　第一引数(初期値)の型

### 5章
- File.listFiles: ディレクトリ内のファイル・ディレクトリの一覧を
　　　　　　Fileクラスで取得する
- File.list: ディレクトリ内のファイル・ディレクトリの一覧を
　　　　          文字列の配列で取得する
<br>

||文字ストリーム    |バイトストリーム|
|--|--|--|
|入力|java.io.Reader|java.io.InputStream|
|出力|java.io.Writer|java.io.Output Stream|

		

- [BufferdReader](BufferedReader)、BufferdInputStreamはReaderより効率的に読み込める
- デシリアライズ: read Object
  シリアライズ: writeObject
- Pathオブジェクトの取得
  - Paths.get("C://hoge/")
  - new File("C://hoge/").toPath()

### 6章
- java.sql.Connectionの参照を取得するには、
  java.sql.DriverManagerのgetConnectionを使用する。

- PreparedStatementのsetXXXの引数に
  0を渡した場合は、実行時にSQLExceptionがスローされる

- Prepared StatementのsetXXXの引数に
  値を指定してない場合も、実行時にSQLExceptionがスローされる

- PreparedStatement.executeUpdate
  - データの挿入・更新・削除で使用する
- ストアドプロシージャの呼び出し
  - Connection.prepare Call("call プロシージャ名")
### 7章
- 上限境界ワイルドカードをつかってジェネリクスを宣言して
変数を作成しても、nullリテラルしか代入できない
- 戻り値を戻すことが目的の場合はentends
- 引数を受け取って利用することが目的の場合はsuper   
 →  [PECS](https://www.xmisao.com/2014/02/12/java-pecs-producer-extends-consumer-super.html)

### 8章
### 9章
### 10章

- Locale.Builder はstaticインナークラスなので
new Locale.Builder() のように宣言できる
<br>

- Properties.get(): 引数がObject型
Properties.getProperty(): 引数が String型
<br>

- Properties.list(): プロパティファイルの中身を一覧表示
<br>

- ResourceBundleは抽象クラスなので
newでインスタンスを生成できない

### 11章
### 12章

整数オーバーフロー攻撃への対策
1. 事前条件テスト
2. アップキャスト
3. BigIntegerクラスを使う

不変オブジェクトは
コンストラクタのアクセス修飾子をなし、
もしくはprivateにして外部パッケージからインスタンス化させないようにする
→ インスタンスを作成する場合はビルダーを提供する

シリアライズプロキシパターン
   　シリアライズ　　: writeReplace
   　デシリアライズ　: readResolve

### 総仕上げ問題

- [java.nio.file.Files: lines() は
ファイル内のすべての行を読み込み、
 Streamオブジェクトで戻す](https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Files.html#lines-java.nio.file.Path-)
<br>
 
- [IntStream.average()はOptionalDoubleを返す](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/IntStream.html#average--)
<br>

- ラッパークラス同士でボクシング、アンボクシングはできない
<br>

- インタフェースには
インスタンスフィールドを定義できないが、
抽象クラスには定義できる
<br>

- [java.util.List: copyOfは
変更不可なリストを戻すため
addメソッドで要素を追加すると
実行時にUnsupportedOperationExceptionが
スローされる](https://docs.oracle.com/javase/jp/8/docs/api/java/util/List.html#add-E-)
<br>

- [Stream.anyMatch()  　:戻り値がboolean](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#anyMatch-java.util.function.Predicate-)
<br>

- [Stream.findAny() 　　:戻り値がOptional](https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html#findAny--)