public class Test {
static int i = 20;
public Test() {
System.err.println("new");
}
static {
int i = 10;
System.err.println("static");
}
public static void main(String[] args) {
Test a = new Test();
System.out.println(a.i);
}
}
结果1:
static
20new
结果2:
static
new
20
结果3:
20static
new
同一个流,如err或out输出的顺序是不会变的,所以static肯定在new之前。out和err是2个流,哪个先把数据流到指定的地方(如控制台)都有可能,类似多线程? 所以20可能在static之前,可能在new之后,还可能在二者之间。而且因为println的换行和正文是分2次流出,所以20 的前后可能还没换行就有static或new。