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虚拟机分类里放大招啦!你们接住了啊!