Java類例項化時jvm執行順序
阿新 • • 發佈:2018-12-31
程式碼:
public class ClassLoaderTest { public static void main(String[] args) { son sons=new son(); } } class parent{ private static int a=1; private static int b; private int c=initc(); static { b=1; System.out.println("1.父類靜態程式碼塊:賦值b成功"); System.out.println("1.父類靜態程式碼塊:a的值"+a); } int initc(){ System.out.println("3.父類成員變數賦值:---> c的值"+c); this.c=12; System.out.println("3.父類成員變數賦值:---> c的值"+c); return c; } public parent(){ System.out.println("4.父類構造方式開始執行---> a:"+a+",b:"+b); System.out.println("4.父類構造方式開始執行---> c:"+c); } } class son extends parent{ private static int sa=1; private static int sb; private int sc=initc2(); static { sb=1; System.out.println("2.子類靜態程式碼塊:賦值sb成功"); System.out.println("2.子類靜態程式碼塊:sa的值"+sa); } int initc2(){ System.out.println("5.子類成員變數賦值--->:sc的值"+sc); this.sc=12; return sc; } public son(){ System.out.println("6.子類構造方式開始執行---> sa:"+sa+",sb:"+sb); System.out.println("6.子類構造方式開始執行---> sc:"+sc); } }
執行結果:
1.父類靜態程式碼塊:賦值b成功
1.父類靜態程式碼塊:a的值1
2.子類靜態程式碼塊:賦值sb成功
2.子類靜態程式碼塊:sa的值1
3.父類成員變數賦值:---> c的值0
3.父類成員變數賦值:---> c的值12
4.父類構造方式開始執行---> a:1,b:1
4.父類構造方式開始執行---> c:12
5.子類成員變數賦值--->:sc的值0
6.子類構造方式開始執行---> sa:1,sb:1
6.子類構造方式開始執行---> sc:12
類載入器例項化時進行的操作步驟(載入–>連線->初始化)。
父類靜態代變數、
父類靜態程式碼塊、
子類靜態變數、
子類靜態程式碼塊、
父類非靜態變數(父類例項成員變數)、
父類建構函式、
子類非靜態變數(子類例項成員變數)、
子類建構函式。
原文地址:https://blog.csdn.net/u014042066/article/details/77574956