Java中的finally语句块是什么?

  • Post category:Java

Java中的finally语句块用于定义一段一定会执行的代码,无论try语句块中有没有发生异常。

finally块是可选的,与try和catch块并列选择使用。如果一个异常被抛出而且被catch块(或者其sub类)捕获,那么控制流就会跳过finally块。如果try块没有抛出异常,那么finally块会在try块执行结束后执行。

finally块经常被用来确保特定操作的执行,这些操作比如说流的关闭或者是连接的释放(可以将这些代码写在finally块中),这些操作无论是否出现异常都将收到保护。

以下是两个finally块的使用示例:

示例一:用于释放资源

public void writeFile(String str) {
    BufferedWriter bw = null; // 定义BufferedWriter对象
    try {
        bw = new BufferedWriter(new FileWriter("test.txt")); // 打开文件test.txt
        bw.write(str); // 向文件中写入内容
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (bw != null) {
                bw.close(); // 关闭文件流
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

示例二:用于关闭数据库连接

public void queryData() {
    Connection conn = null; // 定义Connection对象
    Statement stmt = null; // 定义Statement对象
    try {
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password"); // 打开数据库连接
        stmt = conn.createStatement(); // 创建Statement对象
        ResultSet rs = stmt.executeQuery("select * from person"); // 执行查询
        while(rs.next()) {
            System.out.println(rs.getString("name")); // 输出结果
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (stmt != null) {
                stmt.close(); // 关闭Statement对象
            }
            if (conn != null) {
                conn.close(); // 关闭Connection对象
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在以上两个示例中,代码都无论是否发生异常都会执行finally语句块中的代码,即关闭资源和数据库连接。