You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

故意抛出ArrayIndexOutOfBoundsException却出现两个异常是否正常?

问题解答

这是正常现象,核心原因是你的代码里触发了两次异常抛出:

  • 第一次自动抛出异常:你在try块里执行System.out.println(numbers[10]);,而数组numbers的长度是5,有效索引范围是0到4。访问索引10时,JVM会自动抛出ArrayIndexOutOfBoundsException,这是Java内置的数组越界异常触发逻辑。
  • 第二次手动抛出异常:finally块的执行规则是无论try块是否抛出异常,都会执行其中的代码。所以当try块抛出异常后,程序会进入finally块调用demo()方法,而这个方法里你手动实例化并抛出了另一个ArrayIndexOutOfBoundsException。

当finally块也抛出异常时,try块中原来的异常会被压制,最终程序会以finally块的异常作为最终抛出的异常,但Java会把被压制的异常信息也一并打印出来,所以你会看到两个异常的错误信息。

如果你想只测试手动抛出异常的逻辑,可以调整代码,去掉try块中自动触发异常的代码,比如:

public class ArrayIndexOutOfBoundsExceptionThrown {

    static void demo() {
        System.out.println("Asked for index 10");
        throw new ArrayIndexOutOfBoundsException("Invalid array index!");
    } // end of demo

    public static void main(String[] args) {
        try {
            demo();
        } finally {
            System.out.println("finally 块执行完毕");
        }
    }// end of main

} // end of ArrayIOOBE

这样运行后,就只会出现你手动抛出的那一个异常了。

内容的提问来源于stack exchange,提问作者zafflesia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:42:11