Post 抛出异常时增加行为
Post increment behavior when throwing an exception
昨天遇到了这个奇怪的问题。似乎无法在 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();
}
}
有人会认为 post-increment 不会发生,因为 bork 会抛出异常,但它确实会发生!
这种行为的解释是什么?
在调用方法 bork()
之前调用 i++
操作。
这就是为什么它仍然增加的原因。
所以:
i++
被调用。
- 因此它 returns 递增前
i
的状态。
- 同时
i
的实际状态递增。所以 i
的值现在是 1
.
bork(0)
被调用。
- 抛出异常
- 异常被处理(什么都不做)
- 打印
i
的当前状态等于 1
。
昨天遇到了这个奇怪的问题。似乎无法在 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();
}
}
有人会认为 post-increment 不会发生,因为 bork 会抛出异常,但它确实会发生!
这种行为的解释是什么?
在调用方法 bork()
之前调用 i++
操作。
这就是为什么它仍然增加的原因。
所以:
i++
被调用。- 因此它 returns 递增前
i
的状态。 - 同时
i
的实际状态递增。所以i
的值现在是1
. bork(0)
被调用。- 抛出异常
- 异常被处理(什么都不做)
- 打印
i
的当前状态等于1
。