6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Java Silver】初期化について

Last updated at Posted at 2020-10-10

#インスタンスの初期化

  • コンストラクタで初期化処理を行う
  • インスタンス変数は、インスタンス作成時に初期化される

定数(final)もコンストラクタで初期化できる
クラスに定義された、初期化されていない定数は、コンストラクタで初期化できる

例)

public class Main{
   public static void main(String[] args){
       Sample a = new Sample(5);
       System.out.println(a.num);   //5と表示される

   }
}

class Sample{
     final int num;  //この時点で定数フィールドは初期化されていない
     Sample(int num){  //int num はインスタンス変数と同名のローカル変数
         this.num = num;  //コンストラクタで定数を初期化
     }
}

#コンストラクタの共通処理を初期化する

  • { } という初期化子(インスタンスイニシャライザ)を利用する
  • コンストラクタがオーバーロードされて複数ある場合、共通処理をインスタンスイニシャライザで先に在以降できる
  • インスタンスイニシャライザは、インスタンス化される直前に実行される

例)

public class Main{
   public static void main(String[] args){
       Sample a = new Sample(5);    //「インスタンスイニシャライザを実行」
       System.out.println(a.num);   //5
       
       Sample b = new Sample();    //「インスタンスイニシャライザを実行」
       System.out.println(b.num);  //10

   }
}

class Sample{
     final int num;  //この時点で定数フィールドは初期化されていない
     {
        System.out.println("インスタンスイニシャライザを実行"); 
     }
     Sample(){
         this.num = 10;
     }
     Sample(int num){  
         this.num = num;  //コンストラクタで定数を初期化
     }
}

#staticフィールドを初期化する
staticフィールドはインスタンスを生成しなくても利用できる。
そのため、コンストラクタで初期化できない

→static初期化子(イニシャライザ)で初期化する必要がある

例)

public class Main{
   public static void main(String[] args){       
       System.out.println(Sample.num);  //100と出力
   }
}

class Sample{
     static final int num;  //この時点でstaticな定数は初期化されていない
     static {
        num = 100;  //staticな定数の初期化
     }     
}

#初期化子が動作する順番

イニシャライザ→インスタンスイニシャライザ→コンストラクタ

例)

public class Main{
   public static void main(String[] args){
       User a = new User();   //「イニシャライザの実行 インスタンスイニシャライザの実行 コンストラクタの実行」と出力
  }

}

class User{
  private static int count;
  static{
      User.count = 0;  //static変数を初期化
    System.out.println("イニシャライザの実行");
  }
 
  {
     System.out.println("インスタンスイニシャライザの実行");
  }

  User(){
     System.out.println("コンストラクタの実行");
  }
}
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?