代码块、构造器的运行顺序

最近复习的时候遇到一个小问题,这里将其列出来,防止以后再出现这种问题的时候能够有印象。

之前对静态代码块、代码块、构造器的运行顺序认识有一点小小的错误。这三种运行顺序是先运行静态代码块,代码块,构造器,当含有父类的时候,就先运行父类的静态代码块,再运行子类的静态代码块,接着运行父类的代码块和构造函数,再运行子类的代码块和构造函数。

但是,当构造器中有super的时候,会先运行构造器中的super部分,再运行代码块部分,再运行构造器的剩余部分。

代码示例


class Mid 
{
	static{
		System.out.println("Mid的静态初始化块");
	}
	{
		System.out.println("Mid的普通初始化块");
	}
	public Mid()
	{
		System.out.println("Mid的无参数的构造器");
	}
	public Mid(String msg)
	{
		// 通过this调用同一类中重载的构造器
		this();
		System.out.println("Mid的带参数构造器,其参数值:"
			+ msg);
	}
}
class Leaf extends Mid
{
	static{
		System.out.println("Leaf的静态初始化块");
	}
	
	public Leaf()
	{
		// 通过super调用父类中有一个字符串参数的构造器
		super("疯狂Java讲义");
		System.out.println("测试后");
		
		System.out.println("执行Leaf的构造器");
	}
	{
		
		System.out.println("Leaf的普通初始化块");
	}
}
public class Test
{
	public static void main(String[] args)
	{
		new Leaf();
		new Leaf();
	}
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
静态代码块,构造块和构造方法是Java对象初始化的三种方式,它们各自具有不同的执行顺序和作用。它们的区别如下: 1. 静态代码块是在类被加载时执行的代码块,它只执行一次。静态代码块主要用于类的初始化,如静态变量的初始化等。 2. 构造块是在类定义的代码块,每次创建对象时都会执行,不论是调用无参构造函数还是有参构造函数。构造块用于初始化对象,如为对象的成员变量分配内存等。 3. 构造方法也是用于对象的初始化,但是它可以接收参数。构造方法用于为对象的成员变量赋初值。 下面是一个例子,可以帮助理解它们之间的关系: ```java public class BlockTest { static { System.out.println("静态代码块执行"); } { System.out.println("构造块执行"); } public BlockTest() { System.out.println("无参构造器执行"); } public BlockTest(int a) { System.out.println("有参构造器执行"); } public static void main(String[] args) { BlockTest bt1 = new BlockTest(); BlockTest bt2 = new BlockTest(10); } } ``` 运行以上代码,输出结果如下: ``` 静态代码块执行 构造块执行 无参构造器执行 构造块执行 有参构造器执行 ``` 可以看出,静态代码块是在类被加载时执行的,构造块是每次创建对象时都会执行的,而构造方法是用于为对象的成员变量赋初值的。 需要注意的是,虽然静态代码块和构造块都用于对象的初始化,但是它们的执行顺序是有区别的。静态代码块只会在类初始化时执行一次,而构造块则会在对象创建时执行。因此,静态代码块先于构造块执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值