这些带静态初始化器的行是否保证按顺序运行?因为如果不是那么事情可能会出错
public Class x {
private static final BasicDataSource ds = new BasicDataSource();
private static final JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
private static final SomeDao someDao = new SomeDao(jdbcTemplate);
}
好的......这个怎么样?
public Class x {
private static final BasicDataSource ds;
private static final JdbcTemplate jdbcTemplate;
private static final SomeDao someDao;
static {
ds = new BasicDataSource();
ds.setStuff("foo");
ds.setAnotherProperty("bar");
jdbcTemplate = new JdbcTemplate(ds);
SomeDao someDao = new SomeDao(jdbcTemplate);
}
}
答案 0 :(得分:1)
它们将按照与源代码中列出的顺序相对应的顺序执行。
一个类可以有任意数量的静态初始化块,它们可以出现在类体中的任何位置。运行时系统保证按照它们在源代码中出现的顺序调用静态初始化块。 Initializing Fields
使用以下代码可以观察到这一点:
private static A a1 = new A(0);
private static A a2 = new A(1);
private static A a3 = new A(2);
private static A a4 = new A(3);
private static A a5 = new A(4);
private static A a6 = new A(5);
public static void main (String args[]) { }
static class A {
public A (int a) {
System.out.print(a);
}
}
输出总是 012345
。