昨天遇到了这个奇怪的问题。在Java规范中似乎找不到以下逻辑解释...
public class Program {
public static void main(String[] args) {
int i = 0;
try {
bork(i++);
} catch (Exception e) {
}
System.out.println(i);
}
private static void bork(int i) {
throw new RuntimeException();
}
}
有人会认为后增量不会发生,因为bork引发了异常,但是确实如此!
这种现象的解释是什么?
最佳答案
在调用方法i++
之前,先调用bork()
操作。
这就是为什么它仍然增加的原因。
所以:i++
被调用。
结果,它返回增量之前的i
状态。
同时,i
的实际状态会增加。所以i
的值现在是1
。bork(0)
被调用。
引发异常。
处理异常(不执行任何操作)
打印i
的当前状态,该状态等于1
。