一个静态内部类, 当他的外部类的对象 销毁后,静态内部类 对象 还存在内存中 ,
一个类的对象,无论创建销毁多少次 ,静态内部类的静态对象还是只有那一个,修改的时候,只是在原来的静态对象上,进行修改? 这样理解对不对..
巴扎黑2017-04-18 10:34:45
如果單論靜態內部類,你可以把它看成只是寄生在一個類裡的頂層類,他倆沒啥關係,只是訪問需要帶上外部類名
同理,如果是某個類裡的靜態域,你可以把它看成只是寄生在一個類裡的變量,和他所在的類並沒啥關係,只是要訪問的話要帶上寄生類的類名,而這個變數在虛擬機器裡有且只有一個實例,所有Class.static返回的都是這個對象,所有操作都只針對這一個對象,就算你創建了他寄生類的對象再銷毀,跟它也沒鳥關係
迷茫2017-04-18 10:34:45
首先,靜態內部類和包裝他的外部類沒有任何依附關係(不同於成員,方法,匿名內部類),他們實質還是2個獨立的頂層類,只不過,靜態內部類使用了外部類的名稱空間。也就是說,靜態內部類別可以和普通頂層類別一樣使用,如OutClass.InnerStaticClass。同時,由於靜態內部類別是外部類別的成員,所以可以使用存取修飾符修改他的可見性:public protected private 套件可見
PHPz2017-04-18 10:34:45
從未聽過「靜態內部類別」這個概念,static只有三種使用場景,分別是靜態變數、靜態方法、static區塊
【靜態變數】
當創建物件後,成員變數是儲存在堆中的,而static成員變數和類別的資訊一起儲存在方法區,而不是在堆中,一個類別的static成員變數只有「一份」(儲存在方法區),無論該類別創建了多少物件。
【靜態方法】
static修飾的方法則不需要針對某些物件進行操作,其運行結果僅與輸入的參數有關,呼叫時直接以類別名稱引用即可,且不可以使用this關鍵字。
【static塊】
static區塊為屬於類別的程式碼區塊,在類別載入期間執行的程式碼區塊(建立物件之前),只執行一次,可以用來在軟體中載入靜態資源(影像、音訊等等)。
以上物件都是隨著類別的加載,存放在方法區,有且只有一份。感覺你聊得是Java記憶體模型的分析。有興趣就看看這篇文章,普及一下。
JVM記憶體模型:http://blog.csdn.net/u0121526...