English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Javaのデフォルトのコンストラクタでは静的変数が初期化されていますか?

静的ファイル/変数はこのクラスに属しており、そのクラスとともにメモリにロードされます。オブジェクトを作成せずに呼び出すことができます。(クラス名を使用して参照)。クラス全体で静的字段のコピーが1つしか利用できません。つまり、静的字段の値はすべてのオブジェクトで同じです。static キーワードを使用して静的字段を定義できます。

public class Sample{
   static int num = 50;
   public void demo(){
      System.out.println("demo メソッド内の num の値 ");+ Sample.num);
   }
   public static void main(String args[]){
      System.out.println("main メソッド内の num の値 ");+ Sample.num);
      new Sample().demo();
   }
}

出力結果

main メソッド内の num の値 50
demo メソッド内の num の値 50

静的変数の初期化

クラス内で静的変数を宣言した場合、それらはまだ初期化されていないため、インスタンス変数のようにデフォルトの値で初期化されます。コンパイラはデフォルトのコンストラクタを使用して初期化します。

public class Sample{
   static int num;
   static String str;
   static float fl;
   static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

出力結果

0
null
0.0
false

静的変数の初期化

ただし、static インスタンス変数を宣言した場合、final Java コンパイラはそれをデフォルトのコンストラクタで初期化しません。static および final 変数は初期化する必要があります。コンパイルしないとエラーが発生します。

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

コンパイル時エラー

Sample.java:2: エラー: 変数 num はデフォルトのコンストラクタで初期化されていません
   final static int num;
^
Sample.java:3: エラー: 変数 str はデフォルトのコンストラクタで初期化されていません
   final static String str;
^
Sample.java:4: error: variable fl not initialized in the default constructor
   final static float fl;
^
Sample.java:5: error: variable bool not initialized in the default constructor
   final static boolean bool;
^
4 errors

コンストラクタから最終変数への値の割り当てはできません。-

public class Sample{
   final static int num;
   Sample(){
      num =;100;
   }
}

出力結果

Sample.java:4: error: cannot assign a value to final variable num
   num =;100;
^
1 error

宣言文以外の静的最終変数を初期化する唯一の方法は静的ブロックです。

静的ブロックこれは静的キーワードを使用したコードのブロックです。これらは通常、静的メンバーの初期化に使用されます。JVMはクラスが読み込まれたときにmainメソッドの前に静的ブロックを実行します。

public class Sample{
   final static int num;
   final static String str;
   final static float fl;
   final static boolean bool;
   static{
      num =;100;
      str = "krishna";
      fl =;100.25f;
      bool = true;
   }
   public static void main(String args[]){
      System.out.println(Sample.num);
      System.out.println(Sample.str);
      System.out.println(Sample.fl);
      System.out.println(Sample.bool);
   }
}

出力結果

100
krishna
100.25
true
おすすめ