我需要一种从 try/catch 块的中间中断而不抛出异常的方法。类似于 for 循环中的 break 和 continue 的东西。这可能吗?
关于抛出一个自定义异常(将其命名为“BreakContinueException”),我一直很奇怪,该异常在其 catch 处理程序中没有任何作用。我敢肯定这是非常扭曲的。
那么,任何我不知道的直接解决方案?
我需要一种从 try/catch 块的中间中断而不抛出异常的方法。类似于 for 循环中的 break 和 continue 的东西。这可能吗?
关于抛出一个自定义异常(将其命名为“BreakContinueException”),我一直很奇怪,该异常在其 catch 处理程序中没有任何作用。我敢肯定这是非常扭曲的。
那么,任何我不知道的直接解决方案?
正确的方法可能是通过将 try-catch 块放在单独的方法中来分解方法,并使用 return 语句:
public void someMethod() {
try {
...
if (condition)
return;
...
} catch (SomeException e) {
...
}
}
如果代码涉及大量局部变量,您还可以考虑使用break
带标签的块中的 a,如Stephen C建议的那样:
label: try {
...
if (condition)
break label;
...
} catch (SomeException e) {
...
}
您始终可以使用break
循环构造或break
aioobies 答案中指定的标签来执行此操作。
public static void main(String[] args) {
do {
try {
// code..
if (condition)
break;
// more code...
} catch (Exception e) {
}
} while (false);
}
各种方式:
return
break
或者continue
在循环中break
在标记语句中进行标记(参见@aioobe 的示例)break
在 switch 语句中时。...
System.exit()
......虽然这可能不是你的意思。在我看来,如果你只是想摆脱尝试/捕捉,“打破标签”是最自然(最不扭曲)的方式。但是对于从未接触过 Java 结构的新手 Java 程序员来说,这可能会让人感到困惑。
但是,虽然标签很模糊,但在我看来,将代码包装在 a 中do ... while (false)
以便您可以使用 abreak
是一个更糟糕的主意。这将使非新手和新手感到困惑。新手(和非新手!)最好学习带标签的语句。
顺便说一句,return
在您需要突破finally
. 但是你应该避免return
在一个finally
块中做 a,因为语义有点混乱,并且容易让读者头疼。
有几种方法可以做到:
将代码移入新方法并return
从中移出
将 try/catch 包装在一个do{}while(false);
循环中。
这是我通常做的代码:
try
{
...........
throw null;//this line just works like a 'break'
...........
}
catch (NullReferenceException)
{
}
catch (System.Exception ex)
{
.........
}
在 catch 块中的这个示例中,我更改了 counter 的值,它会在块中中断:
class TestBreak {
public static void main(String[] a) {
int counter = 0;
while(counter<5) {
try {
counter++;
int x = counter/0;
}
catch(Exception e) {
counter = 1000;
}
}
}
}k