Java类初始化顺序

今天又复习了一下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

相关文章
相关标签/搜索