【Java】静态代码块,构造代码块,构造方法,main方法执行顺序

直接上代码,简洁明了!

  • 例1
public class Main {
	
	static {//静态方法块
		System.out.println("静态代码块");
	}
	
	{//构造方法块
		System.out.println("构造方法块");
	}
	
	public Main(){//构造方法
		System.out.println("构造方法");
	}

	public static void main(String[] args) {
		System.out.println("main方法");
	}
}

输出:
静态代码块
main方法

静态代码块优先于main方法,并且构造块只有在创建对象时才会执行,不然不执行。

  • 例2
public class Main {
	
	static {//静态方法块
		System.out.println("静态代码块");
	}
	
	{//构造方法块
		System.out.println("构造方法块");
	}
	
	public Main(){//构造方法
		System.out.println("构造方法");
	}

	public static void main(String[] args) {
		
		Main a = new Main();
		Main b = new Main();
	}
}

输出:
静态代码块
构造方法块
构造方法
构造方法块
构造方法

执行顺序:静态代码块>main方法>构造代码块>构造方法。且静态方法块只执行一次,静态块是随着类加载而执行的,构造块与构造方法随实例化对象而执行的。

  • 当涉及继承时,例3
//父类
public class Parent {
	
	static {//静态方法块
		System.out.println("父类静态代码块");
	}
	
	{//构造方法块
		System.out.println("父类构造方法块");
	}
	
	public Parent(){//构造方法
		System.out.println("父类构造方法");
	}

}

//子类
public class Child extends Parent{
	
	static {//静态方法块
		System.out.println("子类静态代码块");
	}
	
	{//构造方法块
		System.out.println("子类构造方法块");
	}
	
	public Child(){//构造方法
		System.out.println("子类构造方法");
	}
	
	public static void main(String[] args) {	
		Parent a = new Child();
	}
}

输出:
父类静态代码块
子类静态代码块
父类构造方法块
父类构造方法
子类构造方法块
子类构造方法

执行顺序:父类静态代码块>子类静态代码块>父类构造方法块>父类构造方法>子类构造方法块>子类构造方法。

  • 总结
    静态代码块>main方法>构造代码块>构造方法。
    当有继承的情况下:父类静态代码块>子类静态代码块>父类构造方法块>父类构造方法>子类构造方法块>子类构造方法。

你可能感兴趣的:(java)