构造器运行机制

构造器在运行前系统执行什么呢,之后又执行什么呢?总结如下:

  • 加载要创建该对象的父类,以及成员变量和其他继承关系;
  • 加载该类的静态块和静态成员变量,并对其进行初始化等操作;
  • 静态块和静态成员变量加载完毕后创建对象并加载非静态成员变量,并对其进行初始化等操作;
  • 执行构造器里的方法体,完成后该类的对象创建完毕。
  • 父类的运行顺序和该类的运行顺序是一样的。

简单概括为:

       父类静态代码块-->子类静态代码块-->父类非静态代码块-->父类构造函数-->子类非静态代码块-->子类构造函数-->执行子类相应方法

       下面是一段复杂的代码,来说明有继承关系的构造器是何时运行的。

class fruit
{
	//父类静态代码块
	static
	{
		System.out.println("父类的静态代码块执行");
	}
	//父类非静态代码块
	{
		System.out.println("父类的非静态代码块执行");
	}
	
	//创建一个父类的无参构造函数
	public fruit()
	{
		System.out.println("父类的构造函数执行");
	}
	
	//父类的方法
	public void show()
	{
		System.out.println("父类的其他方法执行");
	}
}
public class apple extends fruit
{
	//子类静态代码块
	static
	{
		System.out.println("子类的静态代码块执行");
	}
	
	//子类非静态代码块
	{
		System.out.println("子类的非静态代码块执行");
	}
	
	//创建一个子类的无参构造函数
	public apple()
	{
		System.out.println("子类的构造函数执行");
	}
	
	//子类的方法
	public void show()
	{
		System.out.println("子类的其他方法执行");
	}
	
	public static void main(String[] args)
	{
		//创建对象实例,并执行相应的方法
		apple a=new apple();
		a.show();
	}
}

运行结果如下:

父类的静态代码块执行
子类的静态代码块执行
父类的非静态代码块执行
父类的构造函数执行
子类的非静态代码块执行
子类的构造函数执行
子类的其他方法执行
      解析:在有继承关系的时候,是先初始化父类的各个成员。创建apple对象的时候,先初始化父类的静态块和静态成员变量,再初始化子类的静态块和静态成员变量;接着执行父类的非静态代码块(如果有的话),之后进入到父类的构造器方法里执行该构造器的方法体。父类构造器方法体执行完毕后,执行子类的非静态代码块(如果有的话),之后执行子类构造器的方法体。子类构造器方法体执行完毕后,执行相应的方法。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

年轮陌羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值