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

时间:2015-05-03 21:10:44

标签: java exception-handling try-catch

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

最后代码运行是否存在异常。

try {
   //do something
} catch (Exception e) {}
//do something only if nothing was thrown

6 个答案:

答案 0 :(得分:42)

以下是两种方式:

try {
    somethingThatMayThrowAnException();
    somethingElseAfterwards();
} catch (...) {
    ...
}

或者,如果您希望第二个代码块超出try块:

boolean success = false;
try {
    somethingThatMayThrowAnException();
    success = true;
} catch (...) {
    ...
}
if (success) {
    somethingElseAfterwards();
}

你也可以将if语句放在finally块中,但是你的问题中没有足够的信息来判断这是否更合适。

答案 1 :(得分:17)

try {
    doSomething();
    doSomething2();
} catch (Exception e) {
    doSomething3();
}

在此示例中,doSomething2()仅在doSomething()未引发任何异常时才会执行。

如果doSomething()引发异常,则会跳过doSomething2();,执行将跳转到doSomething3();

另请注意,如果doSomething3()

引发异常,将会执行doSomething2();

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

答案 2 :(得分:3)

只需将代码放入try块即可。如果抛出异常,它将跳转到catch块。如果没有抛出异常,代码就会运行。

try {
    someMethodThatMayThrowException();
    codeThatShouldBeRunIfNoExceptionThrown();
} catch (Exception e) {...}

答案 3 :(得分:1)

流量控制的异常是一种不好的做法。如果您坚持,请使用boolean变量。

boolean thrown = false;

try {
   //do something
} catch (Exception e) {
   thrown = true;
}

//do something only if nothing was thrown

if (!thrown) { 
    // do stuff
}

答案 4 :(得分:1)

对拟议

的增强
try {
    somethingThatMayThrowAnException();
    somethingElseAfterwards();
} catch (...) {
    ...
}

从接受的答案。你应该做的是:

void foo() {
  try {
    doStuff();
  } catch (...) {
    handleException();
  }
}

对于没有接触过“干净代码思维”的人来说,上述感觉有些过分。

但重点在于:你希望在一种方法中混合使用不同的抽象。换句话说:你没有一个try块,并且在同一个方法中有更多代码。

您确保每个方法和任何方法都包含直接路径 - 您可以避免任何使您的阅读流程复杂化的问题。一旦习惯了编写和阅读这类类代码,您就会发现理解代码的时间大大减少。

答案 5 :(得分:0)

当我遇到这个问题时,我正在尝试解决这个确切的问题,这里的答案帮助我进行了思考,并意识到,至少在我的特定情况下,这是我应该提出的错误问题。

我想创建此方法,因为我已经在main()中进行了此操作,并且希望在其他地方进行此操作以实现可移植性。所以我复制了一个包含try / catch块的代码块。但是,事实证明,我根本不想复制catch块,因为如果Connection的创建失败,我只是想完全失败。

现在看来很明显,但是我从来没有想过要首先捕获异常。该代码仅存在于此,因为我复制并粘贴了它。因此,如果由于在try块中而可能不生成值而发现自己在问这个问题,那么请考虑是否只想完全失败而不返回任何不必要的代码。