在 Java 中,類和對象有著不同的生命周期。一個類可以被實例化多次,而每一個實例化對象都有自己的狀態。在此過程中,靜態和非靜態的概念更加凸顯出其重要性。
靜態變量和方法在程序啟動時就已經存在,被賦予初始值。它們存在于內存的靜態區域,并且只會被初始化一次。在 JVM 退出時,它們才會被銷毀。
public class StaticExample { public static int staticVar = 0; public int nonStaticVar = 0; public StaticExample() { staticVar++; nonStaticVar++; System.out.println("靜態變量:" + staticVar + " 非靜態變量:" + nonStaticVar); } public static void staticMethod() { System.out.println("這是一個靜態方法"); } public void nonStaticMethod() { System.out.println("這是一個非靜態方法"); } }
在上面的例子中,我們可以看到 staticVar 和 staticMethod 都是靜態的。在 StaticExample 這個類被初始化時,它們就已經存在了。即使沒有創建 StaticExample 的實例,我們也可以調用 staticVar 和 staticMethod,因為它們和程序的生命周期一起存在。
相反,非靜態的變量和方法只有在創建該類的實例時才存在。每次實例化該類,都會為每個非靜態變量和方法都分配一次內存。而非靜態變量和方法都存在于棧內存中。當實例被銷毀時,分配給它的內存也會被釋放。
下面的例子展示了如何使用靜態變量和方法。
public class StaticDemo { public static void main(String[] args) { StaticExample.staticMethod(); StaticExample obj1 = new StaticExample(); StaticExample obj2 = new StaticExample(); } }
輸出如下:
這是一個靜態方法 靜態變量:1 非靜態變量:1 靜態變量:2 非靜態變量:1
在 main() 方法中,我們通過 StaticExample.staticMethod() 調用了靜態方法。之后,我們創建了兩個 StaticExample 類的實例,每一個實例都有自己的非靜態變量,但靜態變量只有一個,因為它屬于類本身。
總之,在 Java 中,靜態和非靜態的生命周期是不同的。要根據需要使用它們。靜態變量和方法在程序生命周期內只初始化一次,而非靜態變量和方法在每一次創建實例時分配內存。