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++ 操作。 这就是为什么它仍然增加的原因。

所以:

  1. i++ 被调用。
  2. 因此它 returns 递增前 i 的状态。
  3. 同时i的实际状态递增。所以 i 的值现在是 1.
  4. bork(0) 被调用。
  5. 抛出异常
  6. 异常被处理(什么都不做)
  7. 打印 i 的当前状态等于 1