Java の静的変数と最終変数の違い

Rupam Yadav 2023年10月12日
  1. Java の静的変数
  2. Java の最終変数
Java の静的変数と最終変数の違い

このチュートリアルでは、static キーワードと final キーワードの違いを示します。表形式と実際の例の違いについて説明しましょう。

static final
宣言中に静的変数を初期化する必要はありません。 宣言時に final 変数を初期化する必要があります。
静的変数は再初期化できます 最終変数を再初期化することはできません。
ネストされた静的クラス、変数、メソッド、およびブロックで使用されます。 これは、クラス、メソッド、および変数とともに使用されます。
静的メソッドは、他の静的メソッドからのみ呼び出すことができます。 最終メソッドをサブクラスでオーバーライドすることはできません。

Java の静的変数

静的変数またはメソッドを作成すると、オブジェクトではなくクラスにアタッチされます。変数またはメソッドは、プログラム全体で同じ参照を共有します。

次のプログラムには、静的変数 numdummyMethod() と呼ばれる 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 Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

関連記事 - Java Variable