关于java代码中静态代码块、非静态构造代码块以及构造方法的执行顺序

来源:互联网 发布:超时空拦截知乎 编辑:程序博客网 时间:2024/05/16 06:27

在这之前。我一直认为非静态构造代码块一直是先于构造方法执行的,但是在我最近的测试用例中却不是这样的

public class Test1 {
public static int a = 0;
    static {
        a = 10;
        System.out.println("静态代码块在执行a=" + a);
    }
    {
        a = 8;
        System.out.println("非静态代码块在执行a=" + a);
    }
    public Test1() {
       this("带参构造方法在执行a="+a);
       System.out.println("无参构造方法在执行a=" + a);
    }
    public Test1(String n) {
        System.out.println(n);
    }
    public static void main(String[] args) {
        Test1 t = null;
        System.out.println("!!!!!!!!!!!!!!!!!!!!!");
        t = new Test1();
    }

}

这是我用来测试的代码,你们觉得执行顺序应该是怎样的呢?

我觉得大多数小伙伴都跟我想的差不多,但是实际的运行结果确是让我感到很疑惑

运行结果:


开始我确实很疑惑,为什么带参构造方法执行a=8,而不是10,然后我开始了漫长的找资料之路

http://blog.csdn.net/kingzone_2008/article/details/45015301

这位大神总结的很精辟,也确实让我长了不少见识,结论其实只有一个:

非静态构造代码块的执行取决于构造方法中有无this关键字,有this关键字,先执行构造方法,无this关键字,先执行构造代码块

阅读全文
1 0
原创粉丝点击