成员变量、静态代码块、非静态代码块、构造器的初始化顺序
首先说结论吧
静态成员变量->父类静态代码块->子类静态成员变量->子类静态代码块->父类成员变量->父类非静态代码快->父类构造器->子类成员变量->子类非静态代码块->子类构造器
具体例子可以看如下示例
public class TestFuZi { public static void main(String[] args) { Zi z=new Zi(); } } class Fu{ private static int i=getNum("(1)i"); private int j=getNum("(2)j"); static { print("(3)父类静态代码块"); } { print("父类非静态代码块,又称为构造代码块"); } Fu(){ print("(5)父类构造代码块"); } public static void print(String str){ System.out.println(str+"->"+i); } public static int getNum(String str){ print(str); return ++i; } } class Zi extends Fu{ private static int k=getNum("(6)k"); private int h=getNum("(7)h"); static { print("(8)子类静态代码块"); } { print("(9)子类非静态代码块,又称为构造代码块"); } Zi(){ print("(10)子类构造器"); } public static int getNum(String str){ print(str); return ++k; } }
该程序的输出结果是:
学习要有计划、代码要经常练习、学习之后要有输出、多交流、多总结、找出规律。
忌三天打鱼两天晒网、浅尝辄止、闭门造车