在java中处理异常后执行剩余的代码?

时间:2018-02-21 10:12:13

标签: java exception-handling

我可能很傻。但是我接受了采访,我被问到如何在你得到例外之后运行剩下的代码。

我提供了许多方法:

  
      
  1. 我们可以在最后编写代码。
  2.   
  3. 我们可以在catch块中编写代码。 (他们不想处理这两种方法。)
  4.   
  5. 我们可以使用throw关键字。但实际上我试过了,它不起作用。
  6.   

我试图用throw语句解释它们。

我提到了很多帖子。但我的怀疑仍未解决。

例如,

  public static void main(String[] args)
  {
      a(); // getting exception here...
      b(); // This method should executed after handling exception
  } 

如果您能就此提出任何建议,将会有所帮助。所以我能理解它。

4 个答案:

答案 0 :(得分:0)

如果你想执行b();只有抛出异常,才应该在catch(){}块上调用它。无论如何你想要执行它,你可以把它放在最后{}或所有之后(见编辑)

  • 如果b();非常依赖于异常,或者你想使用在try {}块中初始化的变量,你应该在finally {}上写下这样的:

    try{
          a();
         } catch (Exception e){
          e.printStackTrace();
          //what to do if exception was thrown
         } finnaly {
          b();
         }
         //you can also call b(); here instead of inside finnaly
    
  • 如果b();用于处理异常:

    try{
     a();
    } catch (Exception e){
     e.printStackTrace();
     b();
    }
    

你也可以让方法抛出A的异常并在调用a()的方法中处理它;但如果你是主要的,你应该这样做。

编辑:根据要求,提供了面试官要求的正确答案:

    try{
      a();
    } catch (Exception e){
      e.printStackTrace(); //optional
    }

    b();

答案 1 :(得分:0)

对我来说,没有try-catch-finally的唯一简洁方法就是使用CompetableFuture功能并将每个函数的执行分配为一个单独的任务。 像这样:

@Test
public void tryCatchFinallyWithCompletableFuture() throws Exception
{
    CompletableFuture
        .runAsync(
            () -> a()
        )
        .exceptionally(
            (e) -> { System.out.print(e.getMessage()); return null; }
        )
        .thenRun(
            () -> b()
        )
        .get();
}

static void a() {
    throw new IllegalStateException("a()");
}

static void b() {
    System.out.println("...but we continue after a()");
}

但是,我会认真考虑在游乐场项目的任何地方使用这种方法。此外,您必须记住a()b()在多线程上下文中执行,如果存在共享状态,则可能需要同步。

答案 2 :(得分:0)

如果您处理异常并处理它,您可以在try-catch块之后运行b()方法:

try {
  a();
} catch(Exception e) {
  handleMyError(e);
}
b();

这种方式执行a()方法,如果抛出异常,则在方法handleMyError(Exception e)中进行cought和hadled,然后执行继续to b(),无论是否抛出异常。

答案 3 :(得分:-1)

您需要在where或finally子句

中执行方法
try {
  a(); // getting exception here...
} catch(Exception e) {
  b(); // This method should executed after handling exception
}