猿问

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

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


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


它用于释放资源。


但我有一个问题,即使没有 finally 写入,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();意志无论如何都会执行,那为什么我需要finally?


守着一只汪
浏览 129回答 2
2回答

慕田峪9158850

在这种特殊情况下,我会说这确实在某种程度上相同,但是您是否考虑过try with resource这样con会自动关闭?这将是我能想到的最干净的方式。当然,如果Exception抛出了一些不一样的东西(Throwable例如),那么如果没有finally...

阿晨1998

通常使用 catch 块捕获所有异常并不是最佳实践。在这种情况下,如果抛出任何未捕获的东西,finally 会有所帮助。而且,您的第二个代码段将不起作用。
随时随地看视频慕课网APP

相关分类

Java
我要回答