只有在try和catch块中没有抛出异常时,Java才会运行代码?

Muh*_*mer 20 java exception-handling try-catch

如何在没有抛出异常的情况下运行代码?

最后代码运行是否有异常.

try {
   //do something
} catch (Exception e) {}
//do something only if nothing was thrown
Run Code Online (Sandbox Code Playgroud)

khe*_*ood 44

这有两种方式:

try {
    somethingThatMayThrowAnException();
    somethingElseAfterwards();
} catch (...) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望第二个代码try块在块之外:

boolean success = false;
try {
    somethingThatMayThrowAnException();
    success = true;
} catch (...) {
    ...
}
if (success) {
    somethingElseAfterwards();
}
Run Code Online (Sandbox Code Playgroud)

您也可以将该if语句放在一个finally块中,但是您的问题中没有足够的信息来判断这是否更可取.

  • @davidxxx“没有优势”——这取决于用例。在某些情况下,您可能希望在 `try` 块之外而不是在内部执行第二个任务。您可能不希望以与第一个块中的异常相同的方式处理第二个块中的执行。 (4认同)

The*_*son 18

try {
    doSomething();
    doSomething2();
} catch (Exception e) {
    doSomething3();
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,doSomething2()仅在未抛出异常时才会执行doSomething().

如果抛出异常doSomething(),doSomething2();将跳过并执行将跳转到doSomething3();

另请注意,doSomething3()如果发生异常,将执行doSomething2();

如果没有抛出异常,doSomething3();则不会执行.

  • 但是如果`doSomething2`会引发异常呢?我不希望它被抓住. (6认同)

pat*_*ite 5

只需将代码放入try块中即可。如果抛出异常,则会跳到该catch块。如果没有抛出异常,代码将直接运行。

try {
    someMethodThatMayThrowException();
    codeThatShouldBeRunIfNoExceptionThrown();
} catch (Exception e) {...}
Run Code Online (Sandbox Code Playgroud)

  • 问题就变成了:如果 `SomeException` 非常普遍——如果它可以被 `codeThatShouldBeRunIfNoExceptionThrown` 抛出,或者如果该方法更改为将来抛出该异常 - 那么你的 catch 块将(默默地)不再处理只是原来的例外。 (3认同)