Java中普通代码块,构造代码块,静态代码块执行顺序

如果没有this()或super(),执行顺序为:静态代码块>main方法>构造代码块>构造方法;如果有,则先进入this()或super()。
普通代码块,构造代码块,静态代码块,都是在类加载时执行,但是静态代码块只执行一次,而构造代码块每次创建对象时都会执行。

public class MyLearning {
    public static int a = 0;
    public static void main(String[] args){
        MyLearning learn = null;
        System.out.println("************");
        learn = new MyLearning();
    }

    //静态代码块
    static {
        a = 10;
        System.out.println("父类的静态代码块在执行a=" + a);
    }

    //构造代码块
    {
        a = 8;
        System.out.println("父类的非静态代码块在执行a=" + a);
    }

    public MyLearning() {
        this("a在父类带参构造方法中的值:" + MyLearning.a); // 调用另外一个构造方法
        System.out.println(a);
        System.out.println("父类无参构造方法在执行a=" + a);
    }

    public MyLearning(String n) {
        System.out.println(n);
        System.out.println(a);

    }
}

执行结果如下:

父类的静态代码块在执行a=10
************
父类的非静态代码块在执行a=8
a在父类带参构造方法中的值:10
8
8
父类无参构造方法在执行a=8

posted @ 2017-11-28 23:14  NovemberZ  阅读(63)  评论(0)    收藏  举报