[英]What is the complete process of try-catch in java?
我一直在试验 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 的工作方式吗?
任何帮助,将不胜感激。
谢谢你。
是的,两个例子都会抛出ArrayIndexOutOfBoundsException 。
因此, try 块包含一个程序语句块,其中可能会发生异常。 try 块后面总是跟一个catch 块,它处理在关联的try 块中发生的异常。 try 块之后必须跟一个Catch 块或finally 块或两者。
catch 块必须与try 块相关联。 如果在try 块中发生特定类型的异常,则执行相应的catch块。 例如,如果在try块出现算术异常然后封装在catch块算术异常执行的语句。
try
{
//statements that may cause an exception
}
catch (exception(type) e(object))
{
//error handling code
}
如果在try 块中发生异常,则执行控制从try 块传递到catch块。 异常由相应的catch 块捕获。 单个try 块可以有多个与之关联的catch 语句,但每个catch 块只能为一个异常类定义。 该程序还可以包含嵌套的try-catch-finally 块。
在执行完所有try 块之后, finally 块中的代码就会执行。 根本不强制包含finally 块,但是如果您这样做了,无论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;
}
当一条语句在 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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.