Java 中的靜態是什麼意思

Rashmi Patidar 2023年10月12日
  1. 在 Java 中使用 static 關鍵字和成員變數
  2. 在 Java 中使用 static 關鍵字和成員函式
  3. 在 Java 塊中使用 static 關鍵字
Java 中的靜態是什麼意思

在 Java 語言中,static 是一個可以在不同地方使用的關鍵字。static 關鍵字與成員變數、成員函式、塊和巢狀類一起使用。靜態關鍵字的應用是我們不想每次都建立新例項的地方。相反,我們在類內共享單個副本的地方使用它。靜態變數儲存在堆記憶體中,這是一種永久記憶體。

在 Java 中使用 static 關鍵字和成員變數

程式碼塊解釋了靜態變數與非靜態變數的不同之處。

public class StaticVariableUsage {
  public static void main(String[] args) {
    InnerClass in = new InnerClass();
    InnerClass in1 = new InnerClass();

    InnerClass2 in2 = new InnerClass2();
    InnerClass2 in3 = new InnerClass2();
  }

  static class InnerClass {
    static int var4 = 0;
    InnerClass() {
      var4++;
      System.out.println("static variable : " + var4);
    }
  }

  static class InnerClass2 {
    int var5 = 0;
    InnerClass2() {
      var5++;
      System.out.println("non-static variable : " + var5);
    }
  }
}

在上面的程式碼塊中,有一個名為 StaticVariableUsage 類的公共類。它有一個靜態方法和兩個內部類。名為 InnerClass 的內部類有一個靜態整數變數 var4 並從零開始。該類有一個建構函式,用於遞增靜態整數變數並列印其值。

另一個內部類名為 InnerClass2,並儲存一個非靜態變數 var5。這個類也有一個建構函式,它增加非靜態變數並列印它的值。

移動到 main 方法,這裡,InnerClassInnerClass2 被例項化了兩次。當建構函式呼叫發生時,可以推匯出使用 new 關鍵字例項化物件的分析。

正如輸出所說,靜態變數被啟動並被保留。該值第一次增加並將值列印為 1。下一次,當我們建立另一個例項時,建構函式會再次被呼叫。但是靜態變數不會再次用零重新初始化。相反,先前儲存的值會增加,因此,使靜態變數值變為 2。

類似地,當建立 InnerClass2 的例項時,每次非靜態變數都會被初始化為值 0。因此,它在兩次輸出中都將 value 列印為 1

static variable : 1
static variable : 2
non-static variable : 1
non-static variable : 1

在 Java 中使用 static 關鍵字和成員函式

我們有一個名為 StaticFunctionUsage 的外部類,它包含下面類中的另一個內部類。InnerClass 有一個靜態函式。另一個名為 InnerClass1 的內部類有一個非靜態方法。

現在,轉到 main 方法,可以看到可以使用類名直接訪問靜態函式。我們不必例項化 InnerClass 物件。類似地,當我們嘗試使用類名訪問非靜態函式 function1 時,會填充編譯時錯誤。如果我們想訪問該函式,則需要建立類例項,我們使用名稱 in 變數建立了該例項。變數的用途是呼叫 function1,是一個有效的語句。

public class StaticFunctionUsage {
  public static void main(String[] args) {
    InnerClass.function();
    // InnerClass1.function1();
    InnerClass1 in = new InnerClass1();
    in.function1();
  }

  static class InnerClass {
    static void function() {
      System.out.println("In the static function");
    }
  }

  static class InnerClass1 {
    void function1() {
      System.out.println("In the non-static function");
    }
  }
}

上述程式碼塊的輸出如下。

In the static function
In the non-static function

在 Java 塊中使用 static 關鍵字

靜態塊的用途是初始化靜態變數。程式的執行從 main 方法開始。如果類中存在靜態塊,則它會在 main 方法執行之前執行。

下面是解釋靜態塊的程式碼。

public class StaticBlock {
  static {
    System.out.println("In the static block");
  }

  public static void main(String[] args) {
    System.out.println("In the main method");
  }
}

程式碼的輸出如下。正如我們所見,靜態塊中的語句首先被執行。

In the static block
In the main method
作者: Rashmi Patidar
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn