1樓:匿名使用者
首先 感謝了提供了這麼好的一個例子。有點地方令我百思不得其解
由於 private static singleton obj = new singleton();是靜態的,故首先會執行
然後呼叫
private singleton()
因為這個時候jvm還沒有載入到counter1,和counter2.故他們的初始值都是0.都作了加1操作後執行
public static int counter1; 由於沒有給counter1設值,故不會改變它的值所以它就是1
然後執行
public static int counter2 = 0; 這裡又改變couter2的值,設為0,故counter2為0
故執行的順序是1 4 2 3 5
輸出的結果是 1 和 0
其實不難發現輸出什麼樣的結果完全在於private static singleton obj = new singleton();
的位置。樓主可以嘗試把這句話放在兩個變數之後會發現又是另外一種結果。
看來這個虛擬機器還真是難以琢磨。這是一個易錯點。
最後補充一點,這句話很重要
類初始化時首先於每一個靜態欄位開闢一個儲存區([obj],[counter1=0],[counter2=0])。
這個例子比較好!
2樓:墨曼珠
順序14235
輸出obj.counter1==1
obj.counter2==2
先執行到5但是沒執行5,轉到1,1要new一個物件,轉到去執行物件的建構函式,之後返回到1繼續執行2、3,然後再返回到5,結束。
一道C 程式設計題,一道c 程式設計題
多數問題為存心造成 打錯字為主 修改後如下 include include 加一個標頭檔案 為str 函式 using namespace std class binary binary binary char p binary binary int n binary operator binary...
求解一道C語言基礎程式設計題,一道C語言程式設計題求解
舉個例子你就懂了,以16進位制的2abc為例,16進位制轉為10進位制的方法,就是從右到左,依次用該位的數字乘以16的0次方 16的1次方 16的2次方 同樣如果是其它進位制,比如8進位制,那就是8的0次方 1次方等等 之和,比如說2abc轉10進位制,就等於 2abc 16 c 1 b 16 a ...
關於c 一道程式設計題,見下圖,一道C 程式設計題
include include class mystring char str size type thesize size type maxsize public mystring str nullptr thesize 0 maxsize 0 mystring const char s myst...