1、static變量
靜態(tài)變量在內(nèi)存中只有一個拷貝(節(jié)省內(nèi)存)
在加載類的過程中完成靜態(tài)變量的內(nèi)存分配,可用類名直接訪問(方便),當(dāng)然也可以通過對象來訪問(但是這是不推薦的)
所以一般在需要實(shí)現(xiàn)以下兩個功能時使用靜態(tài)變量:
- [x] 在對象之間共享值時
- [x] 方便訪問變量時
2、static靜態(tài)方法
靜態(tài)方法可以直接通過類名調(diào)用,任何的實(shí)例也都可以調(diào)用。
不能用this和super關(guān)鍵字,只能訪問所屬類的靜態(tài)成員變量和成員方法。。
靜態(tài)方法是類內(nèi)部的一類特殊方法,只有在需要時才將對應(yīng)的方法聲明成靜態(tài)的,一個類內(nèi)部的方法一般都是非靜態(tài)的
了方便方法的調(diào)用會聲明為static
3、static代碼塊
獨(dú)立于類成員的static語句塊,可以有多個,位置可以隨便放,它不在任何的方法體內(nèi),JVM加載類時會執(zhí)行這些靜態(tài)的代碼塊,如果static代碼塊有多個,JVM將按照它們在類中出現(xiàn)的先后順序依次執(zhí)行它們,每個代碼塊只會被執(zhí)行一次。
4、static final 修飾成員變量和成員方法
可簡單理解為“全局常量”
對于變量,表示一旦給值就不可修改,并且通過類名可以訪問。
對于方法,表示不可覆蓋,并且可以通過類名直接訪問。
5、static靜態(tài)類
如果一個類要被聲明為static的,只有一種情況,就是靜態(tài)內(nèi)部類
1.靜態(tài)內(nèi)部類跟靜態(tài)方法一樣,只能訪問靜態(tài)的成員變量和方法
2.靜態(tài)內(nèi)部類可以聲明普通成員變量和方法
3.靜態(tài)內(nèi)部類可以單獨(dú)初始化:
使用場景
內(nèi)部類初始化無需實(shí)例化外部類;
當(dāng)某個類需要接受多個參數(shù)進(jìn)行初始化時,推薦使用靜態(tài)類Builder構(gòu)建。
6、import static和import的區(qū)別
一般我們導(dǎo)入一個類都用 import com.....ClassName;
而靜態(tài)導(dǎo)入是這樣:import static com.....ClassName.;
這里的多了個static,還有就是類名ClassName后面多了個 . ,意思是導(dǎo)入這個類里的靜態(tài)方法。當(dāng)然,也可以只導(dǎo)入某個靜態(tài)方法,只要把 .* 換成靜態(tài)方法名就行了。然后在這個類中,就可以直接用方法名調(diào)用靜態(tài)方法,而不必用ClassName.方法名 的方式來調(diào)用。
同理也可以導(dǎo)入靜態(tài)變量