Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのデフォルトコンストラクタで静的変数を初期化できますか?


クラス/静的変数は、インスタンス変数と同じように、クラス内、メソッド外で宣言されますが、staticキーワードを使用してクラスに属します。

これらはコンパイル時にアクセスでき、クラスをインスタンス化する前/なしでアクセスできます。クラス全体で使用できる静的フィールドのコピーは1つだけです。つまり、静的フィールドの値はすべてのオブジェクトで同じになります。 staticキーワードを使用して静的フィールドを定義できます。

クラスで静的変数を宣言する場合、インスタンス変数の場合と同様に、静的変数を初期化していない場合は、コンパイラがデフォルトのコンストラクタでデフォルト値を使用して静的変数を初期化します。

はい、コンストラクターを使用してこれらの値を初期化することもできます。

public class DefaultExample {
   static String name;
   static int age;
   DefaultExample() {
      name = "Krishna";
      age = 25;
   }
   public static void main(String args[]) {
      new DefaultExample();
      System.out.println(DefaultExample.name); System.out.println(DefaultExample.age);
   }
}

出力

Krishna
25

最終および静的の宣言

ただし、インスタンス変数を静的に宣言し、最終的なJavaコンパイラがデフォルトのコンストラクタで初期化しない場合は、静的変数と最終的な変数を初期化する必要があります。そうしないと、コンパイル時エラーが発生します。

public class DefaultExample {
   static final String name;
   static final int age;
   public static void main(String args[]) {
      new DefaultExample();
      System.out.println(DefaultExample.name); System.out.println(DefaultExample.age);
   }
}

コンパイル時エラー

DefaultExample.java:2: error: variable name not initialized in the default constructor
   static final String name;
            ^
DefaultExample.java:3: error: variable age not initialized in the default constructor
   static final int age;
^
2 errors

ただし、 finalと宣言されている変数を初期化しようとすると および静的 、コンパイラはそれを変数を初期化する試みと見なし、コンパイル時エラーが生成されます。

public class DefaultExample {
   static final String name;
   static final int age;
   DefaultExample() {
      name = "Krishna";
      age = 25;
   }
   public static void main(String args[]) {
      new DefaultExample();
      System.out.println(DefaultExample.name);
      System.out.println(DefaultExample.age);
   }
}

コンパイル時エラー

OutputDeviceAssignedDefaultExample.java:5: error: cannot assign a value to final variable name
   name = "Krishna";
   ^
DefaultExample.java:6: error: cannot assign a value to final variable age
   age = 25;
   ^
2 errors

  1. Javaでは、インターフェイス変数はデフォルトで静的で最終的なものですが、なぜですか?

    インターフェースは、どのように実装すべきかではなく、動作のプロトコルを定義します。インターフェースを実装するクラスは、そのインターフェースによって定義されたプロトコルに準拠します。 Javaインターフェースはそれ自体でインスタンス化できないため、インターフェース変数は静的です。変数の値は、インスタンスが存在しない静的コンテキストで割り当てる必要があります。 最後の修飾子は、インターフェース変数に割り当てられた値が、再割り当てできない真の定数であることを保証します。つまり、インターフェースは定数のみを宣言でき、インスタンス変数は宣言できません。 テンプレート: interface inte

  2. Javaで空白の最終変数を初期化できますか

    はい!コンストラクターまたはインスタンス初期化ブロックで空白の最終変数を初期化できます。