是否可以在没有finally块的情况下编写相同的代码?

时间:2018-09-10 11:49:51

标签: java

我知道,即使发生异常,总是执行finally块。

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

它用于释放资源。

但是我有一个问题,即使在没有最后写入的情况下,catch块之后的语句仍然会执行,对吧?

请解释一下。

请参阅以下代码段-

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();仍然会执行,那为什么我最终需要执行?

2 个答案:

答案 0 :(得分:1)

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

当然,如果抛出了不为con的内容(例如,Exception),那么没有Throwable ...

答案 1 :(得分:0)

通常,用catch块捕获所有异常不是最佳实践。在这种情况下,如果抛出任何未被捕获的东西,最终将有所帮助。而且,您的第二个代码段将不起作用。