Java面試題 靜態變量 靜態代碼塊 代碼塊面試
package statict;code
public class StaticTest {對象
public static StaticTest s1 = new StaticTest();
public static StaticTest s2 = new StaticTest();
{
System.out.println("code");
}
static{
System.out.println("static");
}
public static void main(String[] args) {
new StaticTest();編譯
}class
}變量
執行結果:方法
code
code
static
codestatic
解析:文件
靜態代碼塊在執行過程當中是可使用靜態變量的。co
在.class文件編譯階段,靜態變量和靜態代碼塊會按照語句出現的順序拼接成一個類初始化方法,這個方法的執行也將完成靜態變量的初始化和靜態代碼塊的執行,所以會首先執行初始化對象s1,s2,執行普通代碼塊,輸出code.。s1,s2初始化完成之後執行靜態代碼塊代碼,輸出static。最後的code也是非靜態代碼塊中輸出的。
在以往的認知中,總認爲靜態代碼塊在類加載的時候首先執行,而忽略了靜態變量的初始化是可能執行在靜態代碼塊前面的。