java static在類加載時(shí)的行為

小樊
82
2024-10-10 00:51:37
欄目: 編程語言

在Java中,static關(guān)鍵字用于聲明靜態(tài)成員(包括靜態(tài)變量、靜態(tài)方法和靜態(tài)代碼塊)。當(dāng)類被加載到Java虛擬機(jī)(JVM)時(shí),靜態(tài)成員的行為如下:

  1. 靜態(tài)變量:靜態(tài)變量在類加載時(shí)被初始化,只會(huì)被初始化一次。它們屬于類級(jí)別,而不是實(shí)例級(jí)別。這意味著,無論創(chuàng)建了多少個(gè)類的實(shí)例,靜態(tài)變量都只有一個(gè)副本。在內(nèi)存中,靜態(tài)變量存儲(chǔ)在方法區(qū)(或稱為靜態(tài)區(qū)),與類的實(shí)例變量分開存儲(chǔ)。

  2. 靜態(tài)方法:靜態(tài)方法可以在沒有創(chuàng)建類實(shí)例的情況下直接調(diào)用。它們屬于類級(jí)別,而不是實(shí)例級(jí)別。在內(nèi)存中,靜態(tài)方法存儲(chǔ)在方法區(qū)(或稱為靜態(tài)區(qū)),與類的實(shí)例變量分開存儲(chǔ)。當(dāng)調(diào)用靜態(tài)方法時(shí),JVM不需要?jiǎng)?chuàng)建類的實(shí)例,而是直接通過類名和方法名來調(diào)用。

  3. 靜態(tài)代碼塊:靜態(tài)代碼塊在類加載時(shí)執(zhí)行,且只執(zhí)行一次。它們通常用于初始化靜態(tài)變量。靜態(tài)代碼塊按照在類中出現(xiàn)的順序執(zhí)行。在內(nèi)存中,靜態(tài)代碼塊存儲(chǔ)在方法區(qū)(或稱為靜態(tài)區(qū)),與類的實(shí)例變量分開存儲(chǔ)。

總結(jié)一下,當(dāng)Java類被加載時(shí),靜態(tài)成員會(huì)被初始化并存儲(chǔ)在方法區(qū)。靜態(tài)變量和靜態(tài)代碼塊在類加載時(shí)執(zhí)行,而靜態(tài)方法可以在沒有創(chuàng)建類實(shí)例的情況下直接調(diào)用。

0