时间: 2020-09-3|54次围观|0 条评论


try-finally例子

打开文件读取第一行

static String firstLineOffFile(String path) throws IOException {        BufferedReader reader =  new BufferedReader(new FileReader(path));        try {            return reader.readLine();        } finally {            reader.close();        }  }

存在不足

  • 如果底层物理设备异常那么reader.readLine()会异常,同样reader.close()也会异常。这种情况下,第二个异常会抹掉第一个异常。因第一个异常往往是问题所在,抹掉第一个异常导致调试复杂
  • 代码繁琐

引入try-with-resources

使用这个构造资源,必须先实现AutoCloseable接口,其中包括单个返回void的close()方法。Java类库与第三方库中的许多类和接口,现在都实现或扩展了AutoCloseable接口。比如BufferReader的类继承关系

public class BufferedReader extends Reader {
}
public abstract class Reader implements Readable, Closeable {
}
public interface Closeable extends AutoCloseable {
}

一开始的例子改造为
static String firstLineOffFile2(String path) throws IOException {        try (BufferedReader reader =  new BufferedReader(new FileReader(path))){            return reader.readLine();        }}

 优点

  • 代码变得更简洁易懂
  • 产生的异常更有价值,更容易诊断

文章转载于:https://www.cnblogs.com/kaituorensheng/p/10666864.html

原著是一个有趣的人,若有侵权,请通知删除

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《第9条:try-with-resources优于try-finally
   

还没有人抢沙发呢~