HOWTO · Java
Java 中的靜態是什麼意思
本文介紹 Java 中的 static 關鍵字。
本頁內容
在 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 方法,這裡,InnerClass 和 InnerClass2 被例項化了兩次。當建構函式呼叫發生時,可以推匯出使用 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