我需要一种方法来打破try / catch块的中间而不抛出异常。类似于break并继续for循环的东西。这可能吗?
关于抛出一个自定义异常(命名为“Break Continue Exception”),我一直在想到它在catch处理程序中什么都不做。我确定这很扭曲。
那么,我不知道任何直接的解决方案?
正确的方法可能是通过将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) {
...
}
您总是可以使用循环结构中的break
或aioobies答案中指定的标记break
来完成此操作。
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
在转换声明中。...
System.exit()
......虽然这可能不是你的意思。在我看来,如果你只想摆脱尝试/捕获,“打破标签”是最自然(最少扭曲)的方式。但是从未遇到过Java构造的新手Java程序员可能会感到困惑。
但是虽然标签是模糊的,但在我看来,将代码包装在do ... while (false)
中以便你可以使用break
是一个更糟糕的主意。这会使非新手和初学者感到困惑。新手(和非新手!)最好学习标签语句。
顺便说一句,return
适用于你需要突破finally
的情况。但你应该避免在return
块中做finally
,因为语义有点令人困惑,并且容易引起读者头疼。
有几种方法可以做到:
return
do{}while(false);
循环中。在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
如果没有return
,它会怎么样finally
这是我通常做的代码:
try
{
...........
throw null;//this line just works like a 'break'
...........
}
catch (NullReferenceException)
{
}
catch (System.Exception ex)
{
.........
}