Java の静的変数と最終変数の違い
 
このチュートリアルでは、static キーワードと final キーワードの違いを示します。表形式と実際の例の違いについて説明しましょう。
| static | final | 
|---|---|
| 宣言中に静的変数を初期化する必要はありません。 | 宣言時に final 変数を初期化する必要があります。 | 
| 静的変数は再初期化できます | 最終変数を再初期化することはできません。 | 
| ネストされた静的クラス、変数、メソッド、およびブロックで使用されます。 | これは、クラス、メソッド、および変数とともに使用されます。 | 
| 静的メソッドは、他の静的メソッドからのみ呼び出すことができます。 | 最終メソッドをサブクラスでオーバーライドすることはできません。 | 
Java の静的変数
静的変数またはメソッドを作成すると、オブジェクトではなくクラスにアタッチされます。変数またはメソッドは、プログラム全体で同じ参照を共有します。
次のプログラムには、静的変数 num と dummyMethod() と呼ばれる static メソッドを含むクラス DummyClass があります。別のクラスからこれら 2つのメンバーにアクセスするために、これらは静的であるため、DummyClass のオブジェクトを作成することはできません。
クラス名を使用して直接呼び出します。
例:
public class ExampleClass3 {
  public static void main(String[] args) {
    DummyClass.num = 5;
    System.out.println("Static variable value: " + DummyClass.num);
    DummyClass.dummyMethod();
  }
}
class DummyClass {
  public static int num = 0;
  public static void dummyMethod() {
    System.out.println("Inside Static Dummy Method");
  }
}
出力:
Static variable value: 5
Inside Static Dummy Method
外部クラスを参照せずに static キーワードを使用してネストされたクラス。static キーワードを使用して、クラス内に内部クラスを作成できます。
次の例では、クラス DummyClass があり、その中に InnerClass という静的クラスを作成し、このクラスでメソッド dummyMethod() を作成します。
ここで、ExampleClass3 クラスで、DummyClass.InnerClass を使用して InnerClass を取得し、DummyClass クラスのオブジェクトを作成して、dummyMethod() 関数を呼び出します。
例:
public class ExampleClass3 {
  public static void main(String[] args) {
    DummyClass.InnerClass dummyClassObj = new DummyClass.InnerClass();
    dummyClassObj.dummyMethod();
  }
}
class DummyClass {
  static class InnerClass {
    void dummyMethod() {
      System.out.println("Inside Static Dummy Method Of The Inner Static Class");
    }
  }
}
出力:
Inside Static Dummy Method Of The Inner Static Class
Java の最終変数
最終変数は、初期化されると変更できません。この例は、final 変数を作成してから再初期化しようとすると、出力にエラーが発生することを示しています。
public class ExampleClass3 {
  public static void main(String[] args) {
    final int num = 0;
    num = 1;
  }
}
出力:
java: cannot assign a value to final variable num
別のクラスは final クラスを拡張できません。クラスの作成中に final キーワードを使用すると、そのクラスが他のクラスに継承されないように制限されます。
例:
public class ExampleClass3 {
  public static void main(String[] args) {
    new DummyClass().dummyMethod();
  }
}
final class DummyClass {
  public void dummyMethod() {
    System.out.println("Inside Static Dummy Method");
  }
}
class DummyClass2 extends DummyClass {
  public void dummyMethod2() {
    System.out.println("Inside Static Dummy Method 2");
  }
}
出力:
java: cannot inherit from final com.tutorial.DummyClass
サブクラスの final メソッドをオーバーライドすることはできません。最終クラスと同様に、関数が final キーワードを使用する場合、そのサブクラスでオーバーライドすることはできません。
public class ExampleClass3 {
  public static void main(String[] args) {
    new DummyClass2().dummyMethod();
  }
}
class DummyClass {
  public final void dummyMethod() {
    System.out.println("Inside Static Dummy Method");
  }
}
class DummyClass2 extends DummyClass {
  public void dummyMethod() {
    System.out.println("Inside Overridden Dummy Method");
  }
}
出力:
java: dummyMethod() in com.tutorial.DummyClass2 cannot override dummyMethod() in com.tutorial.DummyClass
 overridden method is final
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn