附言:
这个问题已经编辑了几次,因为我以前的代码没有演示这个问题。有些答案可能对编辑后的问题没有完全意义
我有一个名为 Son.java
的公共(public)类
package com.t;
public class Son extends Father {
static int i;
static {
System.out.println("son - static");
i = 19;
}
{
System.out.println("son - init-block");
}
public static void main(String[] args) {
//Son s = new Son();
int a[] = new int[2];
System.out.println(a[5]);
}
}
class Father {
static {
System.out.println("f - static");
}
{
System.out.println("f - init-block");
}
}
当我第一次运行程序时:
输出是:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.t.Son.main(Son.java:19)
f - static
son - static
稍后当我运行这个程序时(输出顺序是随机
)
输出是:
f - static
son - static
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at com.t.Son.main(Son.java:19)
我读到 static
block 在类初始化时执行。
但是为什么这里先出现异常,然后执行静态 block 呢?
我也在使用 Eclipse
来运行我的程序。
有人可以解释一下吗?
最佳答案
异常不会先发生,您只是先看到异常的打印输出。
如果异常先发生,您将永远看不到输出的其余部分。
这是因为您在程序中同时向 System.err
(来自您的异常)和 System.out
输出。这些打印到屏幕上的顺序未定义,因此您可以按不同的顺序获取它们。
关于java - 为什么静态 block 稍后执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22603062/