java代码块执行顺序


public class ClassInitializatin {
	
	public ClassInitializatin(){
		System.out.println("构造器");
	}
	static {//类的初始化
		System.out.println("静态块");
	}
	{
		System.out.println("代码块");
	}
	public static void main(String[] args) {
		System.out.println("主函数");
		ClassInitializatin c=new ClassInitializatin();
	}
}

读者看这段代码心里有底吗?知道答案吗?


初学者给的答案千奇百怪,都可以排列组合了!


那么我告诉你的答案可能会让你惊奇!


正确的答案是:

静态块
主函数
代码块
构造器

下面我就来解释一下:

1:当虚拟机启动时,它会初始化含有main方法的主类,所以直接先初始化了。所以静态快->主函数。

2:接下来实例化对象其实也会初始化那个类,但是类的初始化只有一次,所以并没有输出静态块,而是先输出代码块再输出构造器!那么读者又要问了,为什么new的时候代码块的执行要先于构造器,其实仔细想想答案就有了。

3:java要求任何变量在正式使用前都必须得到必要的初始化。初始化代码块主要用于给类中的局部变量进行初始化的,而构造函数内可能要操作到局部变量,这样必须保证在操作之前所操作的变量得到必要的初始化,因此,初始化代码块必须在构造函数之前执行。

看完的应该都懂了,这些都只是基础知识,接下来我会在我的java虚拟机分类里放大招啦!你们接住了啊!


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值