java代码块执行顺序

来源:互联网 发布:环评工程师 知乎 编辑:程序博客网 时间:2024/05/29 00:32
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虚拟机分类里放大招啦!你们接住了啊!