Java 中 static 變數和 final 變數之間的區別

Rupam Yadav 2023年10月12日
  1. Java 中的靜態變數
  2. Java 中的 final 變數
Java 中 static 變數和 final 變數之間的區別

本教程展示了 staticfinal 關鍵字之間的區別。讓我們以表格格式和工作示例討論差異。

static final
宣告期間不需要初始化靜態變數。 宣告最終變數時需要對其進行初始化。
靜態變數可以重新初始化 最終變數無法重新初始化。
它與巢狀的靜態類、變數、方法和塊一起使用。 它與類、方法和變數一起使用。
靜態方法只能被其他靜態方法呼叫。 最終方法不能被子類覆蓋。

Java 中的靜態變數

當我們建立一個靜態變數或方法時,它是附加到類而不是物件上的。變數或方法將共享整個程式的相同引用。

下面的程式有一個類 DummyClass,其中包含一個靜態變數 num 和一個名為 dummyMethod()static 方法。要從另一個類訪問這兩個成員,我們不能建立 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 類一樣,如果函式使用 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