static

  1. static關(guān)鍵字
    作用:
    1. 方便在沒有創(chuàng)建對象的時候調(diào)用方法或者對象
    2. 被static變量修飾的變量,代碼塊,方法只會在類初始化的時候加載一次
    3. 被static變量修飾的變量,代碼塊,方法在內(nèi)存(運(yùn)行時常量池中)中只會生成一個副本
    4. 使用 static final 進(jìn)行 常量傳播優(yōu)化,在使用 static final 修飾的變量時不會進(jìn)行類的初始化
public class ConstClass{
    static {
        System.out.println("ConstClass init!");
    }
    public static final String HELLOWORLD = "hello world";
}

public class NotInitialization{
    public static void main(String[] args){
        System.out.println(ConstClass.HELLOWORLD);
    }
}

  1. static代碼塊

  1. static變量

  1. static方法

    1. static方法會隨著類的初始化而被裝載到內(nèi)存(運(yùn)行時常量池中類對應(yīng)的Class對象)中。所以static方法在內(nèi)存中有且僅有一個內(nèi)存空間。
    2. 因為static方法中只能存在靜態(tài)成員變量,所以任意一個對象對靜態(tài)成員變量的修改都會影響其他對象。

每一個被虛擬機(jī)加載類在運(yùn)行時常量池中都有且僅有一個對應(yīng)的Class對象


  1. static類
    靜態(tài)內(nèi)部類不依附與外部類(不能在靜態(tài)內(nèi)部類中使用 外部類.this

靜態(tài)內(nèi)部類和普通內(nèi)部類區(qū)別
1. 表面區(qū)別:普通內(nèi)部類可以調(diào)用外部類的任意變量/方法,靜態(tài)內(nèi)部類只能調(diào)用靜態(tài)變量/方法
2. 本質(zhì)區(qū)別普通內(nèi)部類會維護(hù)一個外部類的this變量(也就是和當(dāng)前內(nèi)部類對象相關(guān)聯(lián)的外部類實例),這也就是為什么實例化(new)普通內(nèi)部類先實例化(new)一個外部類的原因。
而靜態(tài)內(nèi)部類沒有維護(hù)該this變量,意味著靜態(tài)內(nèi)部類和外部類沒有強(qiáng)關(guān)聯(lián)關(guān)系(這也就意味著靜態(tài)內(nèi)部類和外部類相當(dāng)于是借雞下蛋的關(guān)系,看著屬于外部類,其實本質(zhì)上沒有任何關(guān)系,靜態(tài)內(nèi)部類相當(dāng)于普通類)。


這是最簡單的一個普通內(nèi)部類示例

public class OuterClass {
    public class InnerClass{
    }
}

使用javap -c進(jìn)行編譯

普通內(nèi)部類
public class OuterClass {
    public static class InnerClass{
    }
}
靜態(tài)內(nèi)部類
外部類

other
靜態(tài)內(nèi)部類可以實例化多個對象(內(nèi)存空間不一樣)

?著作權(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)容