Java 笔记 #04# 类的初始化顺序补充

参考 java中的类的初始化顺序详解

package org.sample;

class Bread {
    Bread() { System.out.println("Bread()"); }
}
class Cheese {
    Cheese() { System.out.println("Cheese()"); }
}
class Lettuce {
    Lettuce() { System.out.println("Lettuce()"); }
}

public class TestOrder {

    static {
        System.out.println("static block - 1 has been executed.");
    }

    {
        System.out.println("non-static - 1 block has been executed.");
    }

    private static final Bread bread = new Bread();
    private static final Cheese cheese = new Cheese();
    static {
        System.out.println("static block - 2 has been executed.");
    }
    private static final Lettuce lettuce = new Lettuce();

    private final Bread bread1 = new Bread();
    {
        System.out.println("non-static - 2 block has been executed.");
    }
    private final Cheese cheese1 = new Cheese();
    private final Lettuce lettuce1 = new Lettuce();

    public static void run() {
        System.out.println("run static method.");
    }

    public TestOrder() {
        System.out.println("create object.");
    }

    public static void main(String[] args) {
        TestOrder.run();
        new TestOrder();
    }
}

/*
output=
static block - 1 has been executed.
Bread()
Cheese()
static block - 2 has been executed.
Lettuce()
run static method.
non-static - 1 block has been executed.
Bread()
non-static - 2 block has been executed.
Cheese()
Lettuce()
create object.
 */

之所以补充上面的代码,主要是为了强调:【实例域以及初始化块】的执行也是依赖于代码书写顺序的(自上而下),而并非随机执行或者按照某种优先顺序。不过,一些特殊情况可能要另当别论。



猜你喜欢

转载自www.cnblogs.com/xkxf/p/9372483.html