Java SE 11勉強ノート


# 基本

以下の本で勉強した際の勉強ノート。

<a href="https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-Silver-SE11%EF%BC%88%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B71Z0-815%EF%BC%89-%E5%B1%B1%E6%9C%AC-ebook/dp/B07YDM92JZ?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8+Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E+Silver+SE11%EF%BC%88%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B71Z0-815%EF%BC%89+Kindle%E7%89%88&qid=1630139818&s=books&sr=1-1&linkCode=li2&tag=i0fe2-22&linkId=33babda914a30dc1b0cb32c9e947652b&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=B07YDM92JZ&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=i0fe2-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=i0fe2-22&language=ja_JP&l=li2&o=9&a=B07YDM92JZ" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> <a href="https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-Gold-SE11-%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B71Z0-816/dp/4798162027?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=java+oracle+gold+se11&qid=1631800606&sr=8-6&linkCode=li2&tag=i0fe2-22&linkId=4debe69138d51a2ef42b5fb639ac12d9&language=ja_JP&ref_=as_li_ss_il" target="_blank"><img border="0" src="//ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4798162027&Format=_SL160_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=i0fe2-22&language=ja_JP" ></a><img src="https://ir-jp.amazon-adsystem.com/e/ir?t=i0fe2-22&language=ja_JP&l=li2&o=9&a=4798162027" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />


## Javaコマンド

1. 一定のルールに従って書いたJavaコードは、`java Main.java`で実行可能。
1. `javac Main.java`でコンパイルして、`java Main`で実行する。
1. `-cp` or `-classpath`でクラスパス追加。

## ファイル

1. クラスファイルは、中間ファイル。

# Exception and Error

## 共通

1. 例外には、unchecked例外とchecked例外がある。
1. checked例外は、例外処理を実装しないとコンパイルエラーとなる。

## Error

1. Java実行環境に関する例外は、`Error`。
1. `Error`とそのサブクラスはunchecked例外。

## Exception

1. アプリケーションに関する例外は、`Exception`。
1. `Exception`のサブクラスの内、`RuntimeException`とそのサブクラスはunchecked例外。それ以外はchecked例外。
1. checked例外は例外処理必須で、unchecked例外は任意。
1. マルチキャッチ構文は、継承関係のある例外クラスでは使用できない。
1. 継承関係のある例外クラスは、サブクラスから順番にcatchしなければならない。
1. tryの使い方には
    1. try-catch
    1. try-finally
    1. try-catch-finally
    1. try-with-resources

# 変数

## リテラル

1. 整数リテラルは、2,8,10,16進数で表現する。
1. 浮動小数点リテラルは、10進数または指数表現。
1. 文字リテラルは`'`で囲む。
1. 文字列リテラルは`"`で囲む。

### 数値リテラル

1. 区切り文字に`_`を使える。 `1_000` 区切り文字は、先頭、末尾、記号の前後には使用できない。

## 変数

1. 変数宣言は、`Type<T extends P> variable = new Type<>();`という形式。
    1. `Type`は型。
    1. `T extends P`は型パラメータ。参照型のみ指定可能。`P`は`T`の親クラス。`T super C`もあり、`C`は`T`の子クラス。
    1. `variable`は変数名。
    1. `Type<>()`はコンストラクタ。この`<>`はダイヤモンド演算子。
1. `var`はローカル変数にのみ使用できる。
1. `var val = null; var val;`は、型推論ができないため、不可。

## 基本データ型

1. Boxingでは、暗黙の型変換できない。
1. Unboxingでは、nullを代入できない。

## 配列

1. 初期化時に配列の大きさを指定しないとコンパイルエラー。`var array = new int[];`

# Enum

1. `switch()`の引数にできるのは、整数型と文字列型のみ。
1. `switch(null)`はコンパイルエラー。

# Class

## Packagee

1. 全てのクラスはパッケージに属する。
1. `package`を記述しないと、無名パッケージに属するものとして扱われる。

## Import

1. `java.lang`パッケージは`import`不要で利用できる。

## 継承

1. `SuperClass s = new SubClass();`とすると、インスタンスメソッド以外は、スーパークラス`SuperClass`のメンバが呼ばれる。

## オーバーライド

1. private メソッドは、オーバーライドできない。
1. オーバーライドしたメソッドが優先されて使用される。
1. オーバーライドする場合は以下のように指定する。
    1. アノテーション：`@Override`をつけても良い。
    1. アクセス修飾子：スーパークラスと同じかそれより広い
    1. 戻り値：スーパークラスと同じかそのサブクラス
    1. メソッド名：スーパークラスと同じ
    1. 引数リスト：スーパークラスと同じ

## オーバーロード

1. オーバーロードされたメソッドの優先順位は以下の通り。
    1. 引数が完全一致したメソッド
    1. 暗黙の型変換をした上で引数が完全一致したメソッド
    1. Boxingした上で引数が完全一致したメソッド
    1. 可変長引数メソッド
1. 可変長メソッド`void method(int... val){}`と同じ配列型を持つメソッド`void method(int[] val){}`は定義できない。


## instanceof

1. `SubClass instanceof SubClass == true`
1. `SubClass instanceof SuperClass == true`
1. `SubClass instanceof OtherInterface == false`
1. `SubClass instanceof OtheClass`はコンパイルエラー。

# Interface

## Field

1. フィールドは、暗黙的に`public static final`になる。

## Method

1. メソッドは、暗黙的に`public abstract`になる。
1. インタフェースの実装クラスは、インタフェースのメソッドと同じスコープを用いること。

### Default method

1. defaultメソッドは、暗黙的に`public default`になる。
1. defaultメソッドのスコープは`public`のみ。

### Static method

1. staticメソッドは、暗黙的に`public static`になる。
1. defaultメソッドのスコープは`public`または`private`のみ。