「 相信,刷過面試題應該都碰到過不少題,關於類繼承後 Java 中靜態代碼塊 / 初始塊 / 構造方法的執行順序問題,往往記一下又忘了,那麼,今天來用很少的時間複習一下」面試
package erdan.demo; public class Demo { static { System.out.println("靜態代碼塊 111"); } static { System.out.println("靜態代碼塊 222"); } { System.out.println("初始塊 111"); } { System.out.println("初始塊 222"); } public Demo() { System.out.println("無參構造方法"); } public Demo(int i) { System.out.println("有參構造方法" + i); } public static void main(String[] args) { new Demo(); } }
輸出:函數
靜態代碼塊 111 靜態代碼塊 222 初始塊 111 初始塊 222 無參構造方法
上圖:測試
筆記:初始塊(非靜態代碼塊)老是和構造方法是一家子,會一塊出現spa
package erdan.demo; public class ChildrenDemo extends Demo{ static { System.out.println("ChildrenDemo:靜態代碼塊 111"); } static { System.out.println("ChildrenDemo:靜態代碼塊 222"); } { System.out.println("ChildrenDemo 初始塊 111"); } { System.out.println("ChildrenDemo 初始塊 222"); } public ChildrenDemo() { System.out.println("無參構造方法 ChildrenDemo"); } public ChildrenDemo(int i) { System.out.println("有參構造方法 ChildrenDemo:" + i); } public static void main(String[] args) { new ChildrenDemo(); System.out.println("---------------------------------"); new ChildrenDemo(1); } }
輸出:code
靜態代碼塊 111 靜態代碼塊 222 ChildrenDemo:靜態代碼塊 111 ChildrenDemo:靜態代碼塊 222 初始塊 111 初始塊 222 無參構造方法 ChildrenDemo 初始塊 111 ChildrenDemo 初始塊 222 無參構造方法 ChildrenDemo --------------------------------- 初始塊 111 初始塊 222 無參構造方法 ChildrenDemo 初始塊 111 ChildrenDemo 初始塊 222 有參構造方法 ChildrenDemo:1
能夠看到下面除了調用有參無參的差異外,虛線下比上面少了靜態代碼塊blog
ps:繼承