今天又复习了一下Java类初始化的顺序,记录一下。
主要是观察类里面成员变量,静态变量,静态代码块,构造器的初始化顺序。写了一个测试类Mobile ,在里面加入相应的输出,观察输出顺序,理解Java类初始化。
测试类Mobile以下:css
public class Mobile { int id; static { System.out.println("--static-----"); } String str=str(); static String staticString=staticString(); public Mobile() { super(); System.out.println("-Mobile()---super()------after------"); } public String str(){ System.out.println("-str()-----"); return "str"; } public static String staticString(){ System.out.println("--staticString()-----"); return "staticString"; } public int getId() { return id; } public void setId(int id) { this.id = id; } }
输出结果:测试
--static----- --staticssss()----- --s()----- -Mobile()---super()------after------
能够看到,优先级:静态变量和静态代码块>成员变量>构造器,若是优先级相同,则按顺序执行。
不管建立多少对象,静态数据都只占用一份存储区域。
若是有父类子类的话,优先执行父类的,再执行子类的。例如:父类的静态变量和静态代码块>子类的静态变量和静态代码块>父类的成员变量>父类的构造器>子类的成员变量>子类的构造器this