English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
静的ファイル/変数はこのクラスに属しており、そのクラスとともにメモリにロードされます。オブジェクトを作成せずに呼び出すことができます。(クラス名を使用して参照)。クラス全体で静的字段のコピーが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