【问题标题】:What is the complete process of try-catch in java?java中try-catch的完整过程是什么?
【发布时间】:2016-03-15 20:03:38
【问题描述】:

我一直在尝试 try-catch,但对它的具体工作原理感到困惑。

try                                     // x is array of 10 doubles set to 0
        {
            for (int a = 0; a < 11; a+= 2)
                x[a] = 5;
        }
        catch(Exception e)
        {
            System.out.println("error");
        }

在这种情况下,可以访问数组中的所有值,但代码在 x[10] 处中断。那么,所有值都设置为 5 了吗?

try                             // x is array of 10 doubles set to 0
        {
            for (int a = -1; a < 11; a+= 2)
                x[a] = 5;
        }
        catch(Exception e)
        {
            System.out.println("error");
        }

在这种情况下,它将尝试 x[-1] 并捕获错误。那么,它不会返回并完成循环(x[0], x[1], ... x[9] )吗?那么,所有的值仍然是 0 吗?

try-catch 是这样工作的吗?
任何帮助将不胜感激。
谢谢。

【问题讨论】:

标签: java exception try-catch


【解决方案1】:

是的,两个例子都会抛出 ArrayIndexOutOfBoundsException

所以, try 块 包含可能发生异常的程序语句块。 try 块 后面总是跟着一个 catch 块,它处理相关 try 块中发生的异常try 块 后面必须跟 Catch 块Finally 块both

catch 块 必须与 try 块 相关联。如果 try 块 中出现特定类型的异常,则执行相应的 catch block。例如,如果 try 块 中发生算术异常,则 catch 块 中包含的 算术异常 语句将执行。

try
{
     //statements that may cause an exception
}
catch (exception(type) e(object))‏
{
     //error handling code
}

如果 try 块 中发生异常,则执行控制权会从 try 块传递给 catch 块时间>。 exception 被相应的catch 块 捕获。单个 try 块 可以有 多个 catch 语句 与之关联,但每个 catch 块 可以为 只有一个异常类。该程序还可以包含嵌套的 try-catch-finally 块

在所有try块执行完毕后,finally块里面的代码就会执行。完全不需要包含 finally 块,但如果包含,它将运行,无论是否抛出和处理 异常try and catch 块

【讨论】:

  • 两个例子都抛出异常。
【解决方案2】:

试一试

try 块中的代码是可以运行的代码,但如果 try 块中的代码抛出异常/错误,那么它将被 catch 块捕获。

您的代码的问题是您将 x 用作数组,并且您可能无法在数组中设置特定位置,以设置您可以执行 x.push 或 x.put 之类的操作我不是确定具体的属性,因为我不太了解java。另一个问题可能是您的索引超出范围,这意味着您可能有一个从零开始的 10 个项目的数组,并且您正在尝试访问第 11 个项目。所以你的循环应该是这样的:

    {
        for (int a = 0; a < x.length; a+= 2)
            x[a] = 5;
    }

【讨论】:

    【解决方案3】:

    当一条语句在 try 块内引发异常时,下一条语句是 catch 块的第一条语句。

    在第一个示例中,for 循环的前几次迭代正常进行,元素 0、2、4、6 和 8 被设置为 5。在a10 的迭代中,尝试访问x[10] 运行时会抛出ArrayIndexOutOfBoundsException 并跳转到catch 块的第一条语句。 x 的其余部分未修改。

    在第二个示例中,for 循环的第一次迭代导致运行时抛出 ArrayIndexOutOfBoundsException(由于尝试访问 x[-1])并跳转到 catch 块的第一条语句。效果是x完全没有修改。

    有关 Java 异常的更多信息,请阅读The Java Tutorials: Exceptions

    【讨论】:

    • 不,第一个代码设置 x[0]=5, x[2]=5, x[4]=5, x[[6]=5, x[8]=5 和然后尝试设置 x[10]=5 但随后会得到一个 IndexOutOfBounds 异常.. x 数组的所有其他值都保持等于 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-18
    • 2012-05-27
    • 1970-01-01
    相关资源
    最近更新 更多