我一直在尝试使用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的工作原理吗? 任何帮助将不胜感激 谢谢。
答案 0 :(得分:1)
是的,两个示例都会抛出 ArrayIndexOutOfBoundsException 。
所以, try块包含一个程序语句块,在其中可能发生异常。 try block 后面总是跟着 catch块,它处理关联的 try块中出现的异常。 try block 必须后跟 Catch block 或 Finally block 或两者。
catch块必须与 try块相关联。如果 try块中出现特定类型的异常,则执行相应的 catch bloc k。例如,如果 try block 中出现算术异常,那么 catch block 中包含的语句将执行算术异常。
try
{
//statements that may cause an exception
}
catch (exception(type) e(object))
{
//error handling code
}
如果 try block 中出现异常,则执行控制权将从 try block >传递到 catch块 EM>。 异常会被相应的 catch块捕获。单个 try块可以包含多个 catch语句,但每个 catch块都可以为< strong>只有一个例外类。该程序还可以包含嵌套的 try-catch-finally块。
执行所有 try blocks 后,执行 finally块中的代码。根本不包含 finally块,但如果这样做,它将运行,无论是否抛出并处理异常通过尝试并捕获块。
答案 1 :(得分:0)
的try-catch
try块中的代码是将运行的代码,但如果try块中的代码抛出异常/错误,则会在catch块中捕获。
您的代码的问题是您使用x作为数组并且您可能无法在数组中设置特定位置,以设置您可以执行类似x.push或x.put的操作我不是确定在特定的属性,因为我不熟悉java。另一个问题可能是您的索引超出范围,这意味着您可能有一个包含零项的10个项目的数组,并且您正在尝试访问第11项。所以你的循环应该是这样的:
{
for (int a = 0; a < x.length; a+= 2)
x[a] = 5;
}
答案 2 :(得分:0)
当一个语句在try块内抛出异常时,下一个语句是catch块的第一个语句。
在第一个示例中,for循环的前几次迭代正常发生,元素0,2,4,6和8设置为5
。在a
为10
的迭代中,尝试访问x[10]
运行时抛出ArrayIndexOutOfBoundsException
并跳转到catch块的第一个语句。 x
的其余部分未经修改。
在第二个示例中,for循环的第一次迭代导致运行时抛出ArrayIndexOutOfBoundsException
(由于尝试访问x[-1]
)并跳转到catch块的第一个语句。结果是x
完全没有修改。
有关Java中的例外的更多信息,请阅读The Java Tutorials: Exceptions。