結論:執行的大致順序如下,
(1) 在一個不存在繼承的類中:初始化static變量,執行static初始化塊-->初始化普通成員變量(如果有賦值語句),執行普通初始化塊-->構造方法
(2)在一個存在繼承的類中:初始化父類static成員變量,運行父類static初始化塊-->初始化子類static成員變量,運行子類static初始化塊-->初始化父類實例成員變量(如果有賦值語句),執行父類普通初始化塊-->父類構造方法-->初始化子類實例成員變量(如果有賦值語句)及普通初始化塊-->子類構造方法。
測試代碼如下:(通過斷點查看代碼執行順序)
public class Student { public static int age=11; public static String name="lucky"; public String address="天台"; static { System.out.println("我是靜態代碼塊"); } public Student(){ System.out.println("我是構造函數"); } public static void test(){ System.out.println(name); System.out.println(age); } } public class Sequence { public static void main(String[] args) { //Student.test(); Student student=new Student(); } }
轉自:https://blog.csdn.net/yuxin6866/article/details/52245765