Java类实例化时候的加载顺序

面试试题中经常考到此问题,现在做进一步的总结:

public class Student {
	public Student(String name){
		System.out.println(name);
	}
}
// 父类
public class FuClass {
	private static Student student=new Student("父类静态变量");
	private Student student1=new Student("父类非静态变量");
	static {
		System.out.println("父类静态代码块");
	}
	public FuClass(){
		System.out.println("父类构造方法");
	}
	{
		System.out.println("父类非静态代码块 ");
	}
	
}
//子类
public class ZiClass extends FuClass {
	private Student student=new Student("子类非静态变量");
	private static Student student1=new Student("子类静态变量");
	public ZiClass(){
		System.out.println("子类构造方法");
	}
	static {
		System.out.println("子类静态代码块");
	}
	{
		System.out.println("子类非静态代码块");
	}
}
//测试类
public class test {
	public static void main(String[] args) {
		ZiClass zi=new ZiClass();
	}
}

最终执行结果:

父类静态变量

父类静态代码块

子类静态变量

子类静态代码块

父类非静态变量

父类非静态代码块 

父类构造方法

子类非静态变量

子类非静态代码块

子类构造方法

  

原文地址:https://www.cnblogs.com/woolhc/p/4925097.html