为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2021-09-12 15:38:22
我知道,即使发生异常,也始终会执行 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?
查看完整描述

2 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2021-09-12
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-09-12
  • 2 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信