java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数

时间:2021-04-12 19:31:41

这一段时间在阿里实习,最近校招季很多内推又开始了,就投了一下腾讯。结果周五收到腾讯地图的电话叫周六去面试。匆匆忙忙的没怎么准备就去面试了,结果不尽如人意,基础知识忘得小一半惨被虐。不过这次面试还是给我敲响了警钟,要有压迫感,前日松散无心学习,现在发现自己还差得远要静下心来。看来隔一段时间就应该去面试一下这样也好认清楚自己的水平价值也好有努力的方向。

正文

由static修饰的代码块称为静态代码块:静态代码块是属于类的,在类加载的时候就开始执行。
构造器:创建对象时用来进行初始化的
构造块:在类中定义,由{}包含,并且不包含在任何方法体内,其位置与类中的其他属性一般。
普通代码块:在方法体中定义,用{}包含。

下面通过一段程序来判断代码的执行顺序,顺便检验一下具有继承关系的类之间的执行顺序

MyclassA.java

public class MyClassA {

//构造器
public MyClassA() {
System.out.println("helloA");
}

//静态代码块
static {
System.out.println("static helloA");
}

//构造块1
{
System.out.println("构造块1:just helloA");
}

//构造块2
{
System.out.println("构造块2:just helloA");
}

}

MyclassB.java

public class MyClassB extends MyClassA {

//构造器
public MyClassB() {
System.out.println("helloB");
}

//构造块1
{
System.out.println("构造块1:just helloB");
}

//静态代码块
static {
System.out.println("static helloB");
}

//main方法
public static void main(String[] args){
new MyClassB().test();
}

//成员方法
public void test(){
{
System.out.println("普通代码块执行");
}
}

//构造块2
{
System.out.println("构造块2:just helloB");
}
}

执行结果如下图所示
java中代码块的执行顺序--静态代码块,构造器,普通代码块,构造块,main主函数
显然是先执行静态代码块,由static修饰的代码块都是在类加载时执行,其中父类代码块比子类先执行这是因为父类肯定要在子类前面进行加载,不然子类如何继承父类呢。
在类加载完毕后,运行过程中会先执行构造块,构造块的执行顺序是由上往下的
之后会执行构造器进行初始化。以上的顺序都是先父类后子类的。
普通代码块则是在main函数中new MyClassB()调用执行。