Questions tagged «try-with-resources»

8
在try-with-resources块中管理多个链接资源的正确习惯吗?
仅使用一种资源时,Java 7 try-with-resources语法(也称为ARM块(自动资源管理))非常好,简短而直接AutoCloseable。但是,当我需要声明相互依赖的多个资源时(例如a FileWriter和a BufferedWriter将其包装),我不确定什么是正确的习惯用法。当然,这个问题涉及AutoCloseable包装某些资源的任何情况,而不仅仅是这两个特定的类。 我提出了以下三种选择: 1) 我见过的天真习惯是在ARM管理的变量中只声明顶层包装器: static void printToFile1(String text, File file) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) { bw.write(text); } catch (IOException ex) { // handle ex } } 这很不错,也很简短,但是坏了。因为底层FileWriter没有在变量中声明,所以它永远不会在生成的finally块中直接关闭。只能通过close包装方法将其关闭BufferedWriter。问题是,如果从bw的构造方法中引发了异常,close则不会调用该异常,因此基础层FileWriter 也不会关闭。 2) static void printToFile2(String text, File file) { try (FileWriter fw = new FileWriter(file); …

5
如何在JDBC中使用try-with-resources?
我有一种使用JDBC从数据库中获取用户的方法: public List<User> getUser(int userId) { String sql = "SELECT id, name FROM users WHERE id = ?"; List<User> users = new ArrayList<User>(); try { Connection con = DriverManager.getConnection(myConnectionURL); PreparedStatement ps = con.prepareStatement(sql); ps.setInt(1, userId); ResultSet rs = ps.executeQuery(); while(rs.next()) { users.add(new User(rs.getInt("id"), rs.getString("name"))); } rs.close(); ps.close(); con.close(); } catch …

4
Kotlin的尝试资源
当我尝试try用Kotlin 编写与Java相同的带有资源的代码时,它对我不起作用。 我尝试了以下各种变化: try (writer = OutputStreamWriter(r.getOutputStream())) { // ... } 但是两者都不起作用。 有谁知道应该用什么代替?显然Kotlin语法没有为这种结构定义,但也许我遗漏了一些东西。它为try块定义语法,如下所示: try : "try" block catchBlock* finallyBlock?;

2
我是否正确使用Java 7 try-with-resources
如果引发异常,我希望缓冲的读取器和文件读取器关闭并释放资源。 public static Object[] fromFile(String filePath) throws FileNotFoundException, IOException { try (BufferedReader br = new BufferedReader(new FileReader(filePath))) { return read(br); } } 但是,是否需要有一个catch成功关闭的子句? 编辑: 本质上,Java 7中的上述代码是否等同于Java 6的以下代码: public static Object[] fromFile(String filePath) throws FileNotFoundException, IOException { BufferedReader br = null; try { br = new BufferedReader(new FileReader(filePath)); return read(br); } …

8
什么是抑制异常?
注释(用户SOC上的)回答到关于尾调用优化的问题提到了Java 7中有一个称呼,是因为“加ARM的”的“抑制异常”,新的功能(适用于ARM CPU的支持?)。 在这种情况下,什么是“受抑制的例外”?在其他情况下,“被抑制的异常”将是被捕获然后被忽略的异常(这是一个好主意)。这显然是不同的。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.