首页 > 解决方案 > 我可以在没有 finally 块的情况下编写相同的代码吗?

问题描述

我知道,即使发生异常,也始终执行 finally 块。

如果我们在 try 或 catch 块中使用 System.exit(0) 它不会执行;

它用于释放资源。

但我有疑问,catch 块之后的语句无论如何都会执行,即使这些语句是在没有 finally 的情况下编写的,对吗?

请解释一下。

请参阅以下代码片段 -

public static void main(String[] args) throws SQLException {

    Connection con=null;
    try {
        String url ="someURL";
        String user ="someUserName";
        String password ="somePassword";

        con=DriverManager.getConnection(url, user, password);
        .
        .
        .
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        if(con!=null) {
            con.close();
        }
    }

}

public static void main(String[] args) throws SQLException {

    Connection con=null;
    try {
        String url ="someURL";
        String user ="someUserName";
        String password ="somePassword";

        con=DriverManager.getConnection(url, user, password);
        .
        .
        .
    }catch(Exception e) {
        e.printStackTrace();
    } 

   if(con!=null) {
     con.close();
   }


}

所以con.close();无论如何我都会执行,那为什么我最终需要呢?

标签: java

解决方案


在这种特殊情况下,我会说这确实是相同的,但是您是否考虑过try with resource自动con关闭的 a ?这将是我能想到的最干净的方式。

当然,如果Exception抛出了一些不一样的东西(Throwable例如),那么如果没有finally...


推荐阅读