2017-04-03 49 views
0

在过去的几天我试图深入挖掘java,我遇到了try catch finally异常处理。在java中如果我们可以处理它,如果我们可以处理它在try块中定义一个标志块的确切使用finally

我知道终于执行任何事情什么,但我想知道“为什么”,我们也可以处理捕获或追捕的异常,为什么最后?

我想出了一个答案

https://stackoverflow.com/a/23537289/7794329

public class tryCatch { 
    public static void main(String[] args) { 

     double p = 1.0D; 
     String str = "bla"; 
     try{ 
      p = Double.valueOf(str); 
     } 
     catch(Exception ex){ 
      System.out.println("Exception Happened"); 
      return; //return statement here!!! 
     }finally{ 
      System.out.println("Finally"); 
     } 
     System.out.println("After finally"); 

     System.out.println("again finally"); 
    } 
} 

输出

Exception Happened 
Finally 

如果我删除的回报;并在最后的代码后面处理。它会运行..所以我们为什么最终只需要因为return语句?是不是像我通过returing代码,并强行在finally.I处理它做的失误还可以在捕捉一个标志,并且把它放在一个的if else块来处理渔获

Why do we use finally blocks?

异常我真的完全不明白,有人能用通俗的语言让我理解吗?为什么我们用最后,如果我们能够从尝试捕捉甚至捕捉处理失败我们可以if else处理它就像如果捕获了异常运行此... ELSE ...

+0

它经常被用来允许你以一种(相对)安全的方式关闭资源,比如文件等,尽管现在几天来,'Closeable'和'try-with-resource'这个问题不大。基本上,当有一些必须执行的操作时,无论“try”如何退出,你都需要使用'finally' – MadProgrammer

+0

'return'语句导致方法在执行完最后一个块后结束。最终模块用于保证某些事情,即设想出现特定的服务崩溃(银行交易,无论是什么),最终想要的结果,悬而未决的交易,还是将通知转发给用户的干净空间? :)所以,基本上,清理是最终块为您提供的可能性之一。 – Seth

+0

@MadProgrammer同意,但我们也可以在if/else块中使用try catch中的标志来处理它。为什么最后? – doe

回答

1

如果有异常被抛出,最后在catch块之后阻塞运行,然后控制流到达catch块决定的地方,这就是返回。如果你摆脱了退货声明,你会发现打印其他东西。

+0

如果我删除该返回,该怎么办?并在最后的代码后面处理。它会运行..所以我们为什么最终只需要因为return语句?这就像我正在犯错误并最终强行处理它一样。 – doe

相关问题