明解Java入門編 第10章まとめ
クラス変数
staticを付けて宣言されたフィールドはクラス変数(静的フィールド)となる。
個々のインスタンスではなくクラスに所属する。そのため、クラス変数のアクセス式は『クラス名.フィールド名』となっている。
または『クラス型変数名.フィールド名』という式でもアクセスできるが紛らわしい書式なのでオススメではない。
ソースファイルとpublicクラス
一つのソースプログラム内で、二つ以上のpublicクラスを宣言することはできない。
publicかつfinalなクラス変数の公開
クラス利用者に提供すべき定数があれば、publicかつfinalなクラス変数として提供すると良い。
クラスメソッド
特定のインスタンスではなくクラス全体に関わる処理や、そのクラスに所属する個々のインスタンスの状態とは無関係な処理は、静的メソッドとして実現する。
異なるシグネチャで同一名のメソッドを定義する多重定義は、クラスメソッドとインスタンスメソッドにまたがって行える。
クラスメソッドの呼び出し
クラス名.メソッド名(...)
インスタンスメソッドの呼び出し
クラス型変数名.メソッド名(...)
非静的メソッド(インスタンスメソッド)
非静的フィールド・静的フィールド・非静的メソッド・静的メソッドのすべてをアクセスできる。自分が所有する変数/メソッドと、みんなで共有する変数/メソッドの両方にアクセスできる。
静的メソッド(クラスメソッド)
静的フィールドと静的メソッドにはアクセスできるが、非静的フィールドと非静的メソッドにはアクセスできない。自分が所有する変数/メソッドをもたないクラスメソッドは、みんなで共有する変数/メソッドにしかアクセスできない。
ユーティリティクラス
内部にステート=状態をもたないので、データとそれを処理するための手続きをカプセル化するというクラス本来の目的をもたない。類似した機能のメソッドや定数を集めてグループ化したもの。
クラス初期化(静的初期化子)
静的ブロックあるいはstaticブロックなどとも呼ばれる。
クラスが初期化される際実行される。
クラスが初期化されるタイミング
・そのクラスのインスタンスが生成される
・そのクラスのクラスメソッドが呼び出される
・そのクラスのクラス変数に値が代入される
・そのクラスの定数ではないクラス変数の値が取り出される
なんらかの形でクラスを初めて利用する時点ではそのクラスのクラス初期化子の実行が完了している。
クラス変数を初期化するために必要な処理は、クラス初期化子で行うと良い。
インスタンス初期化子
クラス内の全コンストラクタで共通に行うべき処理(インスタンス生成のたびに必ず行うべき処理)があればインスタンス初期化子として独立させるとよい。