java对象初始化顺序

很多人对Java或者说C++中的初始化构造顺序有些难以理解,这篇文章就是解释Java中类初始化构造的顺序。以下面的代码说明类与对象初始化顺序。
class Species{
	private String name;
	public Species(){
		System.out.println("Create a new species");
	}
	public Species(String msg){
		System.out.println(msg);
	}
	public void setname(String name){
		this.name=name;
	}
	public String getname(){
		return name;
	}
	static{
		System.out.println("Start Species");
	}
}

class Biont extends Species{
	public static String type;
	public  Species species=new Species("Will create a new species");
	public Biont(String t){
		type=t;
		System.out.println("Create a new Biont");
		System.out.println("It's a "+type);
	}
	
	public static Species kind=new Species("Will create a static new species");
	static{
		System.out.println("Start Biont");
	}
}

public class Initial{
	public static void main(String[] args){
		Biont biont=new Biont("animal");
	}
}
output:
Start Species
Will create a static new species
Start Biont
Create a new species
Will create a new species
Create a new Biont
It's a animal

  所以java中类对象初始化的顺序是:
    1父类静态成员变量
    2子类静态成员变量
    3父类非静态成员变量
    4父类构造器
    5子类非静态成员变量
    6子类构造器
这就是java中对象初始化顺序。
此外这里还有一个隐藏的知识,那就是当父类有多个构造器时,那子类初始化默认会调用哪个?答案是调用无参的那个,如果没有无参的构造器,那就无法通过编译,只能在第一句加上显示的有参构造器。

你可能感兴趣的:(java,C++,c,C#)