我需要一种方法从try / catch块的中间中断而不抛出异常。 类似于break并继续for循环的东西。 这可能吗?
我一直在讨论抛出一个自定义异常(命名为“BreakContinueException”)这个简单的东西在它的catch处理程序中没有做任何事情。我确信这是非常扭曲的。
那么,我不知道任何直接的解决方案?
答案 0 :(得分:47)
执行此操作的正确方法可能是通过将try-catch块放在单独的方法中来分解方法,并使用return语句:
public void someMethod() {
try {
...
if (condition)
return;
...
} catch (SomeException e) {
...
}
}
如果代码涉及大量局部变量,您也可以考虑使用标记块中的break
,如Stephen C所示:
label: try {
...
if (condition)
break label;
...
} catch (SomeException e) {
...
}
答案 1 :(得分:28)
您始终可以使用循环结构中的break
或aioobies answer中指定的带标签的break
来执行此操作。
public static void main(String[] args) {
do {
try {
// code..
if (condition)
break;
// more code...
} catch (Exception e) {
}
} while (false);
}
答案 2 :(得分:12)
各种方式:
return
break
或continue
break
在标签声明中标注(请参阅@ aioobe的示例)break
。...
System.exit()
......虽然这可能不是你的意思。在我看来,如果只是希望摆脱try / catch,那么“break to label”是最自然(最少扭曲)的方式。但对于从未遇到过Java构造的新手Java程序员来说,这可能会让人感到困惑。
但是,虽然标签很模糊,但我认为将代码包装在do ... while (false)
中以便您可以使用break
更糟糕。这会使非新手和初学者感到困惑。新手(和非新手!)最好学习标签语句。
顺便说一下,return
适用于您需要突破finally
的情况。但是你应该避免在return
块中执行finally
因为语义有点令人困惑,并且容易让读者头疼。
答案 3 :(得分:7)
有几种方法可以做到:
将代码移动到新方法中并从中return
将try / catch包裹在do{}while(false);
循环中。
答案 4 :(得分:2)
在catch块中的这个示例中,我更改了counter的值,它会在block:
时中断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
答案 5 :(得分:1)
如果没有return
finally
会如何呢?
答案 6 :(得分:1)
这是我通常做的代码:
try
{
...........
throw null;//this line just works like a 'break'
...........
}
catch (NullReferenceException)
{
}
catch (System.Exception ex)
{
.........
}