Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以不使用finally块编写相同的代码吗?_Java - Fatal编程技术网

Java 我可以不使用finally块编写相同的代码吗?

Java 我可以不使用finally块编写相同的代码吗?,java,Java,我知道,即使发生异常,finally块也总是被执行 如果我们使用System.exit(0)在try或catch块中,它不会执行 它用于释放资源 但我有个问题,catch块之后的语句无论如何都会执行,即使这些语句是在没有final的情况下编写的,对吗 请给我解释一下 请参阅以下代码片段- public static void main(String[] args) throws SQLException { Connection con=null; try {

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

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

它用于释放资源

但我有个问题,catch块之后的语句无论如何都会执行,即使这些语句是在没有final的情况下编写的,对吗

请给我解释一下

请参阅以下代码片段-

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();
   }


}