import java.io.*;
public class tryWithResource {
public static void main(String[] args) throws FileNotFoundException {
// 在jdk1.7之前巨麻烦 file释放close不得不实行很多步骤:
// 以下案列只是为了去读取一个字符。。。不这么写有安全隐患
FileReader fileReader = null;
try {
fileReader = new FileReader("/Users/christopoher/Desktop/book");
int r = fileReader.read();
System.out.println((char) r);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//1.7:
// 在try里必须对象的类有closeable接口的autocloseable接口的close方法
try(FileReader fileReader2 = new FileReader("/Users/christopoher/Desktop/book");) {
int r = fileReader2.read();
System.out.println((char) r);
} catch (IOException e) {
e.printStackTrace();
} // finally省略了,后面接了Closeable,AutoCloseable的对象可以自动关闭
// JDK9进行了优化:
FileReader fileReader3 = new FileReader("/Users/christopoher/Desktop/book");
// 假如有两个对象:
FileReader fr4 = new FileReader("/Users/christopoher/Desktop/book");
// 用分号分开--> ;
try(fileReader3;fr4) { // 在try里必须对象的类有closeable接口的autocloseable接口的close方法
int r = fileReader3.read();
System.out.println((char) r);
} catch (IOException e) {
e.printStackTrace();
}
// 自己定义一个类
CloseDemo closeDemo = new CloseDemo();
try(closeDemo) { // 在try里必须对象的类有closeable接口的autocloseable接口的close方法
int r = fileReader3.read();
System.out.println((char) r);
} catch (IOException e) {
e.printStackTrace();
}
}
static class CloseDemo implements Closeable {
// 在try里必须对象的类有closeable接口的autocloseable接口的close方法
// 也就是说有close方法/能close,而closeDemo能close并且符合这种规定
@Override
public void close() throws IOException {
System.out.println("Close方法被调用了");
}
}
}