12月13日 一道有趣的小題目

2021-07-25 08:47:12 字數 1419 閱讀 6667

在很久很久以前,曾經看過這麼一道題目;

package com.tree.thread;

class singleton

public static singleton getinstance()

} public class test

}

對該題的輸出結果原本的猜測要麼是(0,0)要麼是(0,1);然後實際操作的結果確是:

可以看出counter1和counter2雖然在直觀上感受,初始值都是零,且操作過程完全一樣,但卻結果迥異。何為?

不妨把做一下處理,使counter倆兄弟的程式流程中的動態變化更具體一點。

package com.tree.thread;

class singleton

public static singleton getinstance()

} public class test

}

所得的結果如下:

由此,也可以知道counter倆兄弟在程式中的實際情況了。

首先,jvm規範規定,只有首次使用時虛擬機器才會去載入類。通過main中:

singleton singleton=singleton.getinstance();
虛擬機器首次呼叫singleton類,虛擬機器載入相關的類資訊,並進行靜態域的初始化。

根據規範,引用型別的初始化值為null,基本型別的初始化值是其預設值,且初始化順序遵循其在程式中出現的順序。程式開始時的預設值為:

singleton = null;

counter1 = 0;

counter2 = 0;

然後,初始化singleton,就要執行new方法,呼叫構造器,此時靜態(類)變數counter1=1;counter2=1。再進行counter1和counter2的初始化,counter1並未顯式的賦初始值,故仍為1,而counter2顯式的賦初始值,故為0。所以得到上述輸出結果。

正是因為初始化的順序導致了以上的輸出結果,當singleton初始化之後,counter1和counter2才隨後跟上,導致了counter倆兄弟輸出結果的迥異。

如果改變初始化順序,如:

則結果:

一道短小精悍的JS小題目

看到題目你是不是以為我在開車,沒錯,我就不承認,你能咋的,你瞅啥,別瞅我,瞅題 題目是這樣式的 結果是啥呀,這裡我就不買關子了,結果是undefined,相信基礎好一點的大佬們一眼就能看出來,像我這種就必須兩隻眼一起看,這裡我又想問一句了,大佬們閉著乙隻眼看 不累嗎 讓我們先簡單明瞭的來解釋一下上面...

一道有趣的迴圈題目

問題 輸入為 n,求乙個 n n的矩陣,規定沿 45度線遞增,形成乙個 zigzag 陣列 jepg 編碼裡取畫素資料的排列順序 用 c 實現。本人的實現思路 在 程式設計師面試寶典 中有另一種解法 問題的實質是把 0,n 1 中的整數依之字形填入乙個二維陣列。於是考慮按之字形遍歷陣列,遍歷時,方向...

一道有趣的題目007

描述一輛重型卡車欲穿過x千公尺的沙漠,卡車耗汽油為1公升 千公尺,卡車總載油能力為l公升。顯然卡車裝一次油是過不了沙漠的,因此司機必須設法在沿途建立若干貯油點,使卡車能順利穿過沙漠。試問司機應怎樣建立這些貯油點?每一貯油點應儲存多少汽油,才能使卡車以消耗最少汽油的代價通過沙漠?輸入輸入包含兩個整數x...