static

static,字面意思是靜態(tài),在java中可以用來修飾變量、方法、類,也可以形成靜態(tài)代碼塊。static修飾的字段和成員方法不依賴于類的任何實例,在類加載時,會提取class的類型信息存放到方法區(qū)中。如:類型和直接超類以及直接接口全限定名、類型的常量池、方法信息( 方法名、方法的返回類型、方法的參數(shù)的數(shù)量和類型、方法的修飾符、方法的字節(jié)碼、操作數(shù)棧和棧幀中局部變量的大小、異常表)、類靜態(tài)變量等。類的所有實例共享方法區(qū)中的類信息。

使用static不需要new出一個類來,最基本的用法

  1. 類名.變量名或類名.方法名
  2. 使用import static 靜態(tài)導(dǎo)入,直接在另一個類中使用變量名和方法名
  • static final用來修飾成員變量和成員方法,可簡單理解為“全局常量”。
  • 對于變量,表示一旦給值就不可修改,并且通過類名可以訪問。
  • 對于方法,表示不可覆蓋,并且可以通過類名直接訪問。
  • 對于被static和final修飾過的實例常量,實例本身不能再改變了,但對于一些容器類型(比如,ArrayList、HashMap)的實例變量,不可以改變?nèi)萜髯兞勘旧?,但可以修改容器中存放的對象?/li>

靜態(tài)變量

類中的的成員可以分為靜態(tài)變量和實例變量。靜態(tài)變量存在于方法區(qū)中,在類加載是完成靜態(tài)變量的內(nèi)存分配,被該類的所有實例共享,任何一個實例對靜態(tài)變量的修改后其他實例訪問到的都是改變后的值。實例變量在每創(chuàng)建一個實例之后都會為實例變量分配內(nèi)存,實例變量可以在內(nèi)存中存在多個,互不影響。

靜態(tài)方法

靜態(tài)方法中不能有this和super關(guān)鍵字,不能訪問類的實例變量和實例方法,因為實例成員與特定的對象關(guān)聯(lián)。static方法獨立于任何實例,所以static方法不能使抽象的abstract,必須被實現(xiàn)。

靜態(tài)代碼塊

靜態(tài)代碼塊是在類中獨立于類成員的static語句塊,不在任何方法體類,加載類時會執(zhí)行這些靜態(tài)的代碼塊,如果static代碼塊有多個,jvm按照先后順序依次執(zhí)行,每個代碼塊只會被執(zhí)行一次。如果父類有靜態(tài)代碼塊,則先執(zhí)行父類的再執(zhí)行子類的。靜態(tài)代碼可以在不創(chuàng)建實例的情況下完成一些初始化工作。

靜態(tài)內(nèi)部類

靜態(tài)內(nèi)部類無法訪問外部類的實例成員,因為其中不包含指向外部類對象的引用,但可以訪問外部類的靜態(tài)成員。靜態(tài)內(nèi)部類中可以有靜態(tài)方法,也可以有非靜態(tài)方法。靜態(tài)內(nèi)部類的初始化方法:外部類.內(nèi)部類 XXX = new 外部類.內(nèi)部類();

靜態(tài)導(dǎo)入

import static導(dǎo)入某個類中的靜態(tài)資源,這樣可以不適用類名.資源名,可以直接使用資源名。

靜態(tài)綁定機(jī)制

被static、private、final修飾的方法以及構(gòu)造方法都會被編譯成invokestatic指令,jvm會使用靜態(tài)綁定機(jī)制來調(diào)用這些方法。所謂靜態(tài)綁定機(jī)制,就是在編譯階段就能夠確定調(diào)用哪個方法的方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容