Java 我可以不使用finally块编写相同的代码吗?
我知道,即使发生异常,finally块也总是被执行 如果我们使用System.exit(0)在try或catch块中,它不会执行 它用于释放资源 但我有个问题,catch块之后的语句无论如何都会执行,即使这些语句是在没有final的情况下编写的,对吗 请给我解释一下 请参阅以下代码片段-Java 我可以不使用finally块编写相同的代码吗?,java,Java,我知道,即使发生异常,finally块也总是被执行 如果我们使用System.exit(0)在try或catch块中,它不会执行 它用于释放资源 但我有个问题,catch块之后的语句无论如何都会执行,即使这些语句是在没有final的情况下编写的,对吗 请给我解释一下 请参阅以下代码片段- public static void main(String[] args) throws SQLException { Connection con=null; try {
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();
}
}
}
及
所以我的
con.close()
无论如何都会执行,那么为什么我最终需要它呢?在这种特殊情况下,我想说这确实是完全相同的,但是您是否考虑过使用资源进行尝试,以便con
自动关闭?这将是我能想到的最干净的方式
当然,如果抛出的异常不是异常(Throwable
),那么您的连接将不会在没有的情况下关闭。最后,
。通常使用catch块捕获所有异常不是最佳做法。在这种情况下,如果任何未捕获的东西被抛出,最终将是有用的。而且,您的第二个代码段将无法工作。如果发生异常,它将被捕获到catch块中。con.close将始终执行。对吧?是的。但是用catch(异常e)覆盖整个代码不是一个好的做法是的,使用try with resource
甚至con.close()
也不是必需的。@ninappingale!这使得代码更干净、更好,并且更不容易出错
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();
}
}