结论很明确:在处理必须关闭的资源时,使用 try-with-resources 语句替代 try-finally 语句。 生成的代码更简洁,更清晰,并且生成的异常更有用。 try-with-resources 语句在编写必须关闭资源的代码时会更容易,也不会出错,而使用 try-finally 语句实际上是不可能的。
finalizer机制可以关闭,但是其执行性不可预测,还有可能造成内存泄漏,所以一般不使用,虽然java9还提出了cleaner机制代替了finalizer机制,但是其执行依然不可预测,因此选择就落在了try-catch-finally和try-with-resources之间。本文就是为了讨论该选择哪一种比较好,不过题目已经给出了答案肯定是try-with-resources。下面...
static void copy(String src, String desc) throws IOException {InputStream in = new FileInputStream(src);try {OutputStream out = new FileOutputStream(desc);byte[] bytes = new byte[1024];int n;try {while ((n = in.read(bytes)) != -1) {out.write(bytes, 0, n);}} finally {out.c...
比如finalizer、try-catch-finally、try-with-resources等等。 finalizer机制可以关闭,但是其执行性不可预测,还有可能造成内存泄漏,所以一般不使用,虽然java9还提出了cleaner机制代替了finalizer机制,但是其执行依然不可预测,因此选择就落在了try-catch-finally和try-with-resources之间。 本文就是为了讨论该选择哪一种比较...
在处理必须关闭的资源时,使用try-with-resources语句替代try-catch-finally语句,你会惊奇的发现,编写的代码更简洁,更清晰,同时也省去了手动显式释放资源的烦恼。 一、背景介绍 try-with-resources是 JDK 7 中引入的一个新的异常处理机制,它能让开发人员不用显式的释放try-catch语句块中使用的资源。
try-with-resources 是 Java 7 引入的一种语法结构,用于自动关闭实现了 AutoCloseable 接口的资源。它可以代替传统的 try-catch-finally 结构来处理资源的释放。
总结 在处理必须关闭的资源时,使用try-with-resources语句替代try-finally语句。 生成的代码更简洁,更清晰,并且生成的异常更有用。 try-with-resources语句在编写必须关闭资源的代码时会更容易,也不会出错,而使用try-finally语句实际上是不可能的。
这一点其实深有感触。话不多说,先上代码: 这是一个完整的读取一个文件的第一行字符的代码。 核心其实就两句: 但是为了能够正确的关闭各种资源,代码变得异常冗长。 在Java 7引入try-with-resources之后,所有的问题便得到了解决: 当一个资源类实现了AutoCloseable的时候
try-with-resources语句其实是一种语法糖,通过编译之后又回到了我们开始说的嵌套的那种模式: 可以发现try-with-resources被编译之后,又采取了嵌套的模式,但是和之前的嵌套有点不同,他close的时候都利用了catch去捕获了异常,然后添加到我们真正的异常中,整体逻辑比我们之前的嵌套要复杂一些。
为什么effective java 第三版推荐使用try-with-resources代替try-finally,背景try-finally这个语句想必做java的同学都不陌生吧,每当我们有关闭资源的需求我们都会使用到try-finally这个语句,比如我们在使用锁的时候,无论是本地的可重入锁还是分布式锁都会有下面类似的结