java - 我可以在没有 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();
无论如何我都会执行,那为什么我最终需要呢?
解决方案
在这种特殊情况下,我会说这确实是相同的,但是您是否考虑过try with resource
自动con
关闭的 a ?这将是我能想到的最干净的方式。
当然,如果Exception
抛出了一些不一样的东西(Throwable
例如),那么如果没有finally
...
推荐阅读
- sql - 不带 WHILE 循环的查询
- r - stat_compare_means 与多个组
- sql - 有没有办法在不使用动态生成的情况下更新多个字段时 SQL“设置字段 if”?
- tablesorter - jQuery Tablesorter 不在页面加载时对表格进行排序
- spring-data-jpa - 在列表中,设置 jhipster 中的默认排序列
- google-docs - 用于打印的 Google Doc 上的反转颜色
- rest - 用于复杂操作的 REST 端点
- virtual-machine - VM 映像的临时本地执行
- javascript - valiatorjs 的打字稿导入失败?
- python - 无服务器 AWS Lambda:没有名为“secret_manager”的模块