public class MyInputStream implements AutoCloseable {
private static final String io = "666";
public static String getIo() {
return io;
}
void read(String content) {
System.out.println("Read content " + content);
}
@Override
public void close() throws Exception {
System.out.println("Input stream is closed.");
}
// 测试把资源返回,什么时候会自动关闭资源
public static void main(String[] args) {
try (MyInputStream ss = test2()) {
System.out.println("111");
System.out.println(ss.getIo());
ss.read("main");
} catch (Exception e) {
e.printStackTrace();
}
}
public static MyInputStream test2() {
try (MyInputStream mis = new MyInputStream()) {
mis.read("MyInputStream");
return mis;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
class MyOutputStream implements AutoCloseable {
void write(String content) {
System.out.println("write content " + content);
}
@Override
public void close() throws Exception {
System.out.println("out stream is closed.");
}
}
输出结果为:
Read content MyInputStream
Input stream is closed.
111
666
Read content main
Input stream is closed.
资源会被关闭两次。当然 最好不要将资源直接作为结果返回。