JavaSilverでメモしたところ備忘録として残しておこうと思います。
コンストラクタについて
コンストラクタの決まり
- コンストラクタはメソッド名とクラス名を同じにする
- 戻り値は記述しない記述するとメソッドとして処理される(void,intなど)
- コンストラクタはnew演算子で呼び出す
デフォルトコンストラクタ
- コンストラクタを一つも定義していない場合に自動で作成
クラス名(){
}
- コンストラクタは実行する前にまずスーパークラス(親クラス)を呼び出すようになっている
クラス名(){
super();// 自動で追加
}
- 明示的にコンストラクタヲ記述した場合には作成されない
- 引数なしのコンストラクタを定義せず引数ありのコンストラクタだけ記述した際にもデフォルトコンストラクタは作成されないので引数なしでそのクラスオブジェクトを作成することができない
class a{
public static void main(String args[]){
Sample sample = new sample();// コンパイルエラー
}
}
class Sample{
Sample(int num){// 引数なしのコンストラクタがない
}
}
初期化子(インスタンスイニシャライザ)
- 通常
{
<処理内容>
}
- static初期化子
static {
<処理内容>
}
- コンストラクタが複数あるときは共通処理をインスタンスイニシャライザで先に実行できる
- インスタンスイニシャライザはインスタンス化される直前に実行される
- staticフィールドはインスタンス生成しなくても利用できるがコンストラクタで初期化できないのでstatic初期化子(イニシャライザ)で初期化する必要がある
イニシャライザ → インスタンスイニシャライザ → コンストラクタの順で処理される
変数に代入するインスタンス化をしないインスタンス化
Sample a = new Sample();
// "a"という変数を使いサンプルのインスタンス化したものを何度でも繰り返し使用できる
new Sample().(メソッドなど)
// 変数に代入しないので1回しか使用できない