static 表示 全局舶衬、靜態(tài) 的意思锉罐,用來修飾成員變量和成員方法,也可以形成靜態(tài)static代碼塊确徙,但是Java語言中沒有全局變量的概念。
被static修飾的成員變量和成員方法獨(dú)立于該類的任何對象仅炊。也就是說它不依賴類的特定實(shí)例,被類的所有實(shí)例共享。
只要這個(gè)類被加載嚷那,Jvm就能根據(jù)類名在運(yùn)行時(shí)數(shù)據(jù)區(qū)的方法區(qū)內(nèi)找到他們,因此static對象可以在它的任何對象創(chuàng)建之前訪問杆煞,無需引用任何對象魏宽。
用public修飾的static成員變量和成員方法本質(zhì)是全局變量和全局方法,當(dāng)聲明它類的對象時(shí)决乎,不生成static變量副本队询,而是類的所有實(shí)例共享一個(gè)static變量。
static變量可以用private修飾构诚,表示這個(gè)變量可以在類的靜態(tài)代碼塊中蚌斩,或者類的其他靜態(tài)成員方法中使用,但是不能再其他類中通過類名來直接飲用
static修飾的成員方法和成員變量可以通過類名直接訪問.
用static修飾的代碼塊表示靜態(tài)代碼塊范嘱,JVM加載類時(shí)送膳,就會執(zhí)行該代碼塊。
static變量和實(shí)例變量
靜態(tài)變量在內(nèi)存中只有一個(gè)copy丑蛤,JVM只為靜態(tài)分配一次內(nèi)存
實(shí)例變量叠聋,每創(chuàng)建一個(gè)實(shí)例,就會為實(shí)例變量分配一次內(nèi)存受裹,實(shí)例變量可以在內(nèi)存中有多個(gè)copy碌补,互不影響。
static 變量使用場景:
- 對象之間共享值
- 方便訪問變量時(shí)
靜態(tài)方法
可以通過類名直接調(diào)用
所以靜態(tài)方法中不能使用this和super關(guān)鍵字棉饶,只能訪問類中的靜態(tài)成員變量和成員方法厦章,因?yàn)閟atatic方法獨(dú)立于任何實(shí)例,因此static方法必須被實(shí)現(xiàn)照藻,而不能是抽象的abstract袜啃。
static代碼塊
在類中獨(dú)立于類成員的static 語句塊,位置隨意岩梳,不在任何方法體內(nèi)囊骤,JVM加載類時(shí)會執(zhí)行這些靜態(tài)代碼塊,每個(gè)代碼塊只會被執(zhí)行一次冀值。
static方法限制
- 只能調(diào)用其他static方法
- 只能訪問static數(shù)據(jù)
- 不能使用this或super關(guān)鍵字