1. 程式人生 > >java繼承小題二

java繼承小題二

對象 ID 初始 st2 發現 println 構造代碼塊 方法 內存

class Test2_Extends { public static void main(String[] args) { Zi z = new Zi(); } /* 1,jvm調用了main方法,main進棧 2,遇到Zi z = new Zi();會先將Fu.class和Zi.class分別加載進內存,再創建對象,當Fu.class加載進內存 父類的靜態代碼塊會隨著Fu.class一起加載,當Zi.class加載進內存,子類的靜態代碼塊會隨著Zi.class一起加載 第一個輸出,靜態代碼塊Fu,第二個輸出靜態代碼塊Zi 3,走Zi類的構造方法,因為java中是分層初始化的,先初始化父類,再初始化子類,所以先走的父類構造,但是在執行 父類構造時,發現父類有構造代碼塊,構造代碼塊是優先於構造方法執行的所以 第三個輸出構造代碼塊Fu,第四個輸出構造方法Fu 4,Fu類初始化結束,子類初始化,第五個輸出的是構造代碼塊Zi,構造方法Zi */ } class Fu { static { System.out.println("靜態代碼塊Fu"); } { System.out.println("構造代碼塊Fu"); } public Fu() { System.out.println("構造方法Fu"); } } class Zi extends Fu { static { System.out.println("靜態代碼塊Zi"); } { System.out.println("構造代碼塊Zi"); } public Zi() { System.out.println("構造方法Zi"); } }

java繼承小題二