基本
以下の本で勉強した際の勉強ノート。
Javaコマンド
- 一定のルールに従って書いたJavaコードは、
java Main.java
で実行可能。 -
javac Main.java
でコンパイルして、java Main
で実行する。 -
-cp
or-classpath
でクラスパス追加。
ファイル
- クラスファイルは、中間ファイル。
Exception and Error
共通
- 例外には、unchecked例外とchecked例外がある。
- checked例外は、例外処理を実装しないとコンパイルエラーとなる。
Error
- Java実行環境に関する例外は、
Error
。 -
Error
とそのサブクラスはunchecked例外。
Exception
- アプリケーションに関する例外は、
Exception
。 -
Exception
のサブクラスの内、RuntimeException
とそのサブクラスはunchecked例外。それ以外はchecked例外。 - checked例外は例外処理必須で、unchecked例外は任意。
- マルチキャッチ構文は、継承関係のある例外クラスでは使用できない。
- 継承関係のある例外クラスは、サブクラスから順番にcatchしなければならない。
- tryの使い方には
- try-catch
- try-finally
- try-catch-finally
- try-with-resources
変数
リテラル
- 整数リテラルは、2,8,10,16進数で表現する。
- 浮動小数点リテラルは、10進数または指数表現。
- 文字リテラルは
'
で囲む。 - 文字列リテラルは
"
で囲む。
数値リテラル
- 区切り文字に
_
を使える。1_000
区切り文字は、先頭、末尾、記号の前後には使用できない。
変数
- 変数宣言は、
Type<T extends P> variable = new Type<>();
という形式。-
Type
は型。 -
T extends P
は型パラメータ。参照型のみ指定可能。P
はT
の親クラス。T super C
もあり、C
はT
の子クラス。 -
variable
は変数名。 -
Type<>()
はコンストラクタ。この<>
はダイヤモンド演算子。
-
-
var
はローカル変数にのみ使用できる。 -
var val = null; var val;
は、型推論ができないため、不可。
基本データ型
- Boxingでは、暗黙の型変換できない。
- Unboxingでは、nullを代入できない。
配列
- 初期化時に配列の大きさを指定しないとコンパイルエラー。
var array = new int[];
Enum
-
switch()
の引数にできるのは、整数型と文字列型のみ。 -
switch(null)
はコンパイルエラー。
Class
Packagee
- 全てのクラスはパッケージに属する。
-
package
を記述しないと、無名パッケージに属するものとして扱われる。
Import
-
java.lang
パッケージはimport
不要で利用できる。
継承
-
SuperClass s = new SubClass();
とすると、インスタンスメソッド以外は、スーパークラスSuperClass
のメンバが呼ばれる。
オーバーライド
- private メソッドは、オーバーライドできない。
- オーバーライドしたメソッドが優先されて使用される。
- オーバーライドする場合は以下のように指定する。
- アノテーション:
@Override
をつけても良い。 - アクセス修飾子:スーパークラスと同じかそれより広い
- 戻り値:スーパークラスと同じかそのサブクラス
- メソッド名:スーパークラスと同じ
- 引数リスト:スーパークラスと同じ
- アノテーション:
オーバーロード
- オーバーロードされたメソッドの優先順位は以下の通り。
- 引数が完全一致したメソッド
- 暗黙の型変換をした上で引数が完全一致したメソッド
- Boxingした上で引数が完全一致したメソッド
- 可変長引数メソッド
- 可変長メソッド
void method(int... val){}
と同じ配列型を持つメソッドvoid method(int[] val){}
は定義できない。
instanceof
SubClass instanceof SubClass == true
SubClass instanceof SuperClass == true
SubClass instanceof OtherInterface == false
-
SubClass instanceof OtheClass
はコンパイルエラー。
Interface
Field
- フィールドは、暗黙的に
public static final
になる。
Method
- メソッドは、暗黙的に
public abstract
になる。 - インタフェースの実装クラスは、インタフェースのメソッドと同じスコープを用いること。
Default method
- defaultメソッドは、暗黙的に
public default
になる。 - defaultメソッドのスコープは
public
のみ。
Static method
- staticメソッドは、暗黙的に
public static
になる。 - defaultメソッドのスコープは
public
またはprivate
のみ。