this關鍵字及記憶體分配

2021-07-09 17:29:05 字數 1239 閱讀 2442

以如下程式為例分析this關鍵字及記憶體分配

public

class

testthis

testthis increament()

void print()

public

static

void

main(string args)

}

首先,執行testthis testthis = new testthis(100),在棧記憶體中新建乙個名為testthis的引用,在堆記憶體中new乙個testthis物件,名為testthis指向這個testthis物件。testthis物件中包含乙個i變數和this指標,this指標指向自身。呼叫構造方法,構造方法有形式引數 i,棧記憶體中為其分配一塊名為 i 的區域,100傳遞為 i 的值。i 的值傳遞給this.i 即 i 將值傳遞給this指向的物件的成員變數 i ,物件的成員變數 i 值變為1。構造方法執行完畢。執行完畢後構造方法的形式引數所占用的記憶體塊消失。

繼續執行,testthis.increament().increament().print(),首先執行testthis.increament()方法,i 變成101,increament()方法最後return this,return的值會存放在棧記憶體的一塊臨時區域裡,return的值跟this的值相同,故這塊區域是指向物件的乙個引用。

接下來執行testthis.increament().increament(),與第一次執行increament()一樣,首先i值會+1變成102,然後執行return,棧記憶體中新給一塊臨時區域存放指向物件的引用。

接下來執行print(),此時有字串常量「i =」,這個字串常量存到data segment中,最終完成輸出。

轉換分配C explicit關鍵字

ps 今天上午,非常鬱悶,有很多簡單基礎的問題搞得我有些迷茫,哎,碼代幾天不寫就忘。目前又不當coo,還是得用心記碼代哦!在c primer 4th的第394講解了explicit這個關鍵字,面上就是我的學習心得。按照認默定規,只有乙個引數的構造數函也定義了乙個隱式轉換,將該構造數函對應資料型別的資...

JVM記憶體模型及Volatile關鍵字

記憶體模型 1.每乙個執行緒有乙個工作記憶體 2.工作記憶體存放主存中變數的值的拷貝 1,當資料從主存複製到工作儲存時,必須出現兩個操作 第一,由主記憶體執行read操作,第二,由工作記憶體執行的響應的load操作,當資料從工作記憶體拷貝到主記憶體時,也出現兩個操作 第一由工作記憶體執行的儲存sto...

volatile關鍵字及jmm記憶體模型

計算機指令都是在cpu中執行的,在指令執行過程中必定伴隨著大量的讀取和寫入操作,那個程式執行時的資料時存放在記憶體的,隨著cpu的更新換代,記憶體的速度已經遠遠的跟不上cpu的速度,這使得cpu的讀取寫入效率非常低。為了解決這一問題,在cpu與記憶體間都以cpu快取記憶體作為中轉。也就是在cpu在執...