類載入機制導致靜態變數出錯問題

2022-05-06 17:48:16 字數 857 閱讀 3155

先看**:

1

public

class

test 7}

89class

singleton

1920

public

static

int i2 = 0;

2122

public

static

singleton getinstance()

2526 }

執行結果是

i1:1

i2:0

process finished with exit code 0

**分析:

整個執行過程,分為載入、鏈結、初始化,主要分析鏈結和初始化階段**的邏輯

分配記憶體,並且將其初始化為預設值,在這裡,singleton類的執行流程是

a.為i1分配記憶體,並且初始化為預設值0

b.為singleton分配記憶體,並且初始化為null

c.為i2分配每次,並且初始化為預設值0

2.初始化階段,由於執行了singleton.getinstance()方法,是對singleton類的主動呼叫,會進行singleton類的初始化(初始化會做的事情:為類的靜態成員變數賦予正確的初始值)的過程為:

a.i1置為初始值,這裡i1沒有主動賦值,跳過

b.singleton置為初始值,這裡是new乙個物件,並且,這時候物件的i1為主動賦值之後的值(0),i2是分配的預設值(0),進行自增操作以後,i1=1 i2=1

c.i2置為初始值,這裡是0,所以,到這裡 i1=1 i2=0

python類靜態變數

python的類靜態變數直接定義在類中即可,不需要修飾符,如 class test stc attr 1def init self,attr1,attr2 self.attr1 attr1 self.attr2 attr2 在類test中,stc attr是屬於類test的靜態變數,attr1和at...

類靜態變數 問題

類的靜態成員變數 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...

C 類的靜態變數

1.必須學好英文。乙個簡單有力的理由就是查閱資料時可以不侷限於中文。2.msdn很強大,前提是必須掌握好英文。c 類的靜態變數屬於類,而不屬於類的物件。但類的物件可以使用它。如果有多個物件,則他們共享該靜態變數。類的靜態變數在類中宣告,在類外定義,即在類外賦值。最好不要在標頭檔案中定義變數,因為可能...