我需要一种从try/catch块中间断开而不引发异常的方式。 与break相似并继续for循环的内容。 这可能吗?如何在不引发Java异常的情况下从try/catch块中断开
我一直在关于抛出一个自定义的异常(命名为“BreakContinueException”),它的catch处理程序中什么也不做。我相信这是非常扭曲的。
那么,我没有意识到任何直接的解决方案?
我需要一种从try/catch块中间断开而不引发异常的方式。 与break相似并继续for循环的内容。 这可能吗?如何在不引发Java异常的情况下从try/catch块中断开
我一直在关于抛出一个自定义的异常(命名为“BreakContinueException”),它的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) {
...
}
有几种方法可以做到这一点:
从中
return
将try/catch包裹在do{}while(false);
循环中。
您可以随时与来自循环结构,一个break
或在aioobies回答指定的标记break
做到这一点。
public static void main(String[] args) {
do {
try {
// code..
if (condition)
break;
// more code...
} catch (Exception e) {
}
} while (false);
}
难道这样会跑try try的finally {}块吗? –
@Basil Musa:是的! – dacwe
IMO,'do ... while(false)'应该被认为是一个糟糕的替代标签语句。 –
各种方法:
return
break
或continue
当循环break
标记时,在标记声明(见@ aioobe的例子)break
在switch语句时。...
System.exit()
......尽管这可能不是你的意思。在我看来,“突破标签”是最自然的(至少扭曲)的方式来做到这一点,如果你只是想走出一个try/catch的。但是对于从未遇到过Java构造的新手Java程序员来说,这可能会让人困惑。
虽然标签不明显,但我认为将代码包装在do ... while (false)
中以便您可以使用break
是一个糟糕的主意。这会混淆非新手和新手。新手(和非新手!)更好地了解标记语句。
顺便说一句,return
作品的情况下,你需要跳出finally
的。但是,您应该避免在finally
块中执行return
,因为语义有点令人困惑,容易让读者头疼。
在此示例中catch块我改变计数器的值,它会破坏而块:
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
1)问题是关于抛出一个尝试而不抛出异常。您在封面下抛出一个异常,并且对JIT编译器来说可能太难以优化。 2)捕捉“例外”是不好的。 –
这是代码中,我通常做:
try
{
...........
throw null;//this line just works like a 'break'
...........
}
catch (NullReferenceException)
{
}
catch (System.Exception ex)
{
.........
}
1)这不是有效的Java。 2)问题是关于抛出一个'try'而不抛出异常。你*显式抛出一个异常。 –
@aioobe:如果该方法应该返回“void”以外的东西该怎么办? – Gruber
@Gruber,我不认为我理解这个问题。在第一个代码片段中,你必须在'return'关键字后加一个表达式,并在方法底部包含一个return语句。 – aioobe