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.
*/

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

上一篇:Flask系列10-- Flask请求上下文源码分析


下一篇:微信小程序 条件渲染 wx:if