Java代码块执行顺序

Java中静态代码块、构造代码块、构造方法代码块、父子类代码块之间执行顺序及代码示例


1、静态代码块

public class HelloA {

	public HelloA() {
		System.out.println("constructor A...");
	}

	//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
	{
		System.out.println("I'm A class");
	}
	//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
	//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
	//静态代码块
	static {
		System.out.println("static A");
	}
	public static void main(String[] args) {
		
	}
}

运行结果:

static A
2、构造代码块、构造方法
public class HelloA {

	public HelloA() {
		System.out.println("constructor A...");
	}

	//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
	{
		System.out.println("I'm A class");
	}
	//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
	//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
	//静态代码块
	static {
		System.out.println("static A");
	}
	public static void main(String[] args) {
		HelloA helloA = new HelloA();
	}
}

运行结果:


3、main主方法代码

public class HelloA {

	public HelloA() {
		System.out.println("constructor A...");
	}

	//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
	{
		System.out.println("I'm A class");
	}
	//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
	//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
	//静态代码块
	static {
		System.out.println("static A");
	}
	public static void main(String[] args) {
		System.out.println("main start");
		HelloA helloA = new HelloA();
		System.out.println("main end");
	}
}


运行结果:

static A
main start
I'm A class
constructor A...
main end

4、子类和父类的代码块

public class HelloB extends HelloA {
 
	private static String  str = "1";
	
	
	public HelloB() {
		System.out.println("constructor B...");
	}
	//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
	{
		System.out.println("I'm B class");
	}
	//使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化
	//静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
	//静态代码块
	static {
		System.out.println("static B");
	}

	
	/**
	 * 代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块)
	 * 继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)
	 * @param args
	 */
	@SuppressWarnings("unused")
	public static void main(String[] args) {
		
		System.out.println("main method start");
		HelloB helloB = new HelloB();
		System.out.println("main method end");

		//同步代码块
		synchronized(str){
			System.out.println("同步代码块:" + str);
		}
		//普通代码块
		{
			int x = 10;
			System.out.println("普通代码块x=" + x);
		}
		
	}

}

运行结果:

static A
static B
main method start
I'm A class
constructor A...
I'm B class
constructor B...
main method end
同步代码块:1
普通代码块x=10


5、总结:

代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块)
继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值