在Java中,static
關鍵字用于聲明靜態成員(包括靜態變量、靜態方法和靜態代碼塊)。當類被加載到Java虛擬機(JVM)時,靜態成員的行為如下:
靜態變量:靜態變量在類加載時被初始化,只會被初始化一次。它們屬于類級別,而不是實例級別。這意味著,無論創建了多少個類的實例,靜態變量都只有一個副本。在內存中,靜態變量存儲在方法區(或稱為靜態區),與類的實例變量分開存儲。
靜態方法:靜態方法可以在沒有創建類實例的情況下直接調用。它們屬于類級別,而不是實例級別。在內存中,靜態方法存儲在方法區(或稱為靜態區),與類的實例變量分開存儲。當調用靜態方法時,JVM不需要創建類的實例,而是直接通過類名和方法名來調用。
靜態代碼塊:靜態代碼塊在類加載時執行,且只執行一次。它們通常用于初始化靜態變量。靜態代碼塊按照在類中出現的順序執行。在內存中,靜態代碼塊存儲在方法區(或稱為靜態區),與類的實例變量分開存儲。
總結一下,當Java類被加載時,靜態成員會被初始化并存儲在方法區。靜態變量和靜態代碼塊在類加載時執行,而靜態方法可以在沒有創建類實例的情況下直接調用。