Java 中 static 變數和 final 變數之間的區別
本教程展示了 static
和 final
關鍵字之間的區別。讓我們以表格格式和工作示例討論差異。
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 Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn