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

文章通过代码示例和执行结果详细阐述了Java中静态代码块、构造代码块和构造方法的执行顺序。首先,静态代码块在类加载时执行,优先于对象创建,父类的静态代码块先于子类。然后,构造代码块在创建对象时执行,父类构造代码块先于子类。最后,构造方法按顺序调用,先父类后子类。总结了Java的分层初始化机制。
摘要由CSDN通过智能技术生成

github:https://github.com/nocoders/java-everything.git

名词解释

  1. 静态代码块java中使用static关键字修饰的代码块,每个代码块只会执行一次,JVM加载类时会执行静态代码块中的代码,静态代码块先于主方法执行。
  2. 构造代码块:直接在类中定义的代码块,没有加static关键字,在创建实例对象时先于构造方法执行。
  3. 构造方法:创建实例对象的方法

代码示例

/**
 * 测试 父类、子类 静态代码块、构造代码块、构造方法执行顺序
 *
 * @author linmeng
 * @date 2023/3/1 14:42
 */
public class DemoTest {

	public static void main(String[] args) {
		new Son();
		System.out.println("再次执行===============");
		new Son();
	}

}


class Parent {

	{
		System.out.println("父类构造代码块");
	}

	static {
		System.out.println("父类静态代码块");
	}

	public Parent() {
		System.out.println("父类构造方法");
	}

}

class Son extends Parent {

	{
		System.out.println("子类构造代码块");
	}

	static {
		System.out.println("子类静态代码块");
	}

	public Son() {
		System.out.println("子类构造方法");
	}

}

执行结果:

在这里插入图片描述

总结如下:

由于静态代码块是在方法区中进行加载的,所以静态代码块的加载优先级大于对象的创建。所以父类和子类的静态代码块一定是先加载出来的。

其次,由于Java有一个分层话初始化机制,所以Java会先加载父类对象,其次再加载子类对象。

构造代码块的代码执行优先级也是大于构造方法的。所以最终的执行次序为:

父类静态代码块 - 子类静态代码块 - 父类构造代码块 - 父类构造方法 - 子类构造代码块 - 子类构造方法

参考链接

  1. Java中静态代码块、构造方法、代码块、父类与子类之间执行顺序及父类子类实例化对象
  2. Java中子类继承父类,父子类静态代码块、构造代码块以及构造方法的执行次序
  3. 父类、子类的静态代码块、构造代码块、静态变量、构造方法执行顺序加深理解
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值