乙個值得深思的JVM示例

2021-08-28 09:15:41 字數 1074 閱讀 5189

public class jvm1 

}class singleton

public static singleton getinstantce()

}

我們來簡單的分析一下:

jvm類載入機制:載入,連線,初始化。

1、由於singleton.getinstantce()會主動初始化singleton類,連線的準備階段counter1、counter2 會分配記憶體並設定預設值0,而testcase2則設定為null。

2、類的初始化階段需要做是執行類構造器(類構造器是編譯器收集所有靜態語句塊和類變數的賦值語句按語句在原始碼中的順序合併生成類構造器,物件的構造方法是(),類的構造方法是(),可以在堆疊資訊中看到),因此先執行第一條靜態變數的賦值語句即singleton testcase2= new singleton(),此時會進行物件的初始化,物件的初始化是先初始化成員變數再執行構造方法,所以會先進行counter3 = 4;在呼叫singleton構造方法,接著執行類的初始化

為了驗證我們的猜想,我們不妨調整一下類變數的順序,如下

public class jvm1 

}class singleton

public static singleton getinstantce()

}

可以試試輸出結果為:

counter3:4

counter1:1

counter2:1

類的初始化階段需要做是執行類構造器(類構造器是編譯器收集所有靜態語句塊和類變數的賦值語句按語句在原始碼中的順序合併生成類構造器,物件的構造方法是(),類的構造方法是(),可以在堆疊資訊中看到),因此先執行靜態變數的賦值語句即public static int counter1;public static int counter2 = 0;先執行類的初始化,此時counter1和counter2變成了0;接著執行物件的構造singleton.getinstantce()構造此時會進行物件的初始化,物件的初始化是先初始化成員變數再執行構造方法,所以會先進行counter3 = 4;

乙個簡單但值得深思的問題

今天朋友給我出了這樣一道題 a1 a2 a3 a4 a5 n a為4 8 12 16 20中的任乙個,這4個數字只能用一次 運算符號可以為 或 中的任乙個,加號減號不限使用次數 找找哪個組合可以使n等於14.然後問是否可以用程式來解決.而我當時就想,不是很簡單的問題嗎?使用幾個for語句就可以實現了...

10個值得深思的PHP面試問題

第乙個問題關於弱型別 str1 yabadabadoo str2 yaba if strpos str1,str2 else正確執行的輸出結果 yabadabadoo does not contain yaba strpos是返回字串str2在str1的位置,沒有找到則返回false然而實際上這次返...

10個值得深思的PHP面試問題

本文翻譯自 文章所羅列的問題雖然看似簡單,但是每個背後都涵蓋了乙個或幾個大家容易忽視的基礎知識點,希望能夠幫助到你的面試和平時工作。第乙個問題關於弱型別 str1 yabadabadoo str2 yaba if strpos str1,str2 else 正確執行的輸出結果 yabadabadoo...