Java 为什么在JDK 7中,使用try with resources特性可以自动关闭文件?
当我阅读本文时,try-with-resources将不需要调用close-to-close文件。为什么? 在第一个示例中,它在finally中调用close方法Java 为什么在JDK 7中,使用try with resources特性可以自动关闭文件?,java,Java,当我阅读本文时,try-with-resources将不需要调用close-to-close文件。为什么? 在第一个示例中,它在finally中调用close方法 package com.mkyong.io; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderExample { public static v
package com.mkyong.io;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader("C:\\testing.txt"));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
但是在第二个示例中,它没有调用close方法,并且仍然有效。为什么?
package com.mkyong.io;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("C:\\testing.txt")))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
因为Java为您处理结账 try with resources语句是声明一个或多个资源的try语句。资源是一个必须在程序完成后关闭的对象。try with resources语句确保在语句末尾关闭每个资源。任何实现java.lang.AutoCloseable的对象(包括实现java.io.Closeable的所有对象)都可以用作资源
因为Java为您处理结账 try with resources语句是声明一个或多个资源的try语句。资源是一个必须在程序完成后关闭的对象。try with resources语句确保在语句末尾关闭每个资源。任何实现java.lang.AutoCloseable的对象(包括实现java.io.Closeable的所有对象)都可以用作资源
来自Oracle文档: try with resources语句是一个try语句,它声明了一个 或者更多的资源。资源是一个对象,必须在 程序结束了。try with resources语句 确保在语句末尾关闭每个资源
来自Oracle文档: try with resources语句是一个try语句,它声明了一个 或者更多的资源。资源是一个对象,必须在 程序结束了。try with resources语句 确保在语句末尾关闭每个资源
这是Java7中的一个特性,它将关闭您在try中使用的所有资源。。。无论try块是否成功执行。在java 7之前,如果需要此功能,我们必须使用finally块。这是java 7中的一项功能,它将关闭您在try中使用的所有资源。。。无论try块是否成功执行。在Java7之前,如果需要此功能,我们必须使用finally块。尝试使用资源只是减少finally块的开销。在try中,您可以在try块中定义所需的不同资源。Try-With-Resource块确保在Try块执行结束时关闭资源
基本上所有实现自动关闭接口的资源,这些资源都可以由JVM自动关闭。您也可以检查Java文档中的描述。尝试使用资源只需减少最后阻塞的开销。在try中,您可以在try块中定义所需的不同资源。Try-With-Resource块确保在Try块执行结束时关闭资源
基本上所有实现自动关闭接口的资源,JVM可以自动关闭这些资源。您也可以检查Java文档中的描述。因为流实现了自动关闭接口…这是一种语言级别specification@MadProgrammer对于try-with-resource,他们必须实现java.lang。AutoCloseable@SubOptimal是这样的,;Pha你有没有试过阅读关于这个项目的文档?似乎不是这样。因为流实现了自动关闭接口…这是一种语言级别specification@MadProgrammer对于try-with-resource,他们必须实现java.lang。AutoCloseable@SubOptimal是这样的,;Pha你有没有试过阅读关于这个项目的文档?看起来不是这样。我认为如果你调用try块中的System.exit,资源不会被关闭,但我可能错了。@Puce你是对的!!!。我测试了它,发现在这种情况下它不会接近。更正了我的回答,谢谢。我认为如果您呼叫System.exit进入try区块,资源不会关闭,但我可能错了。@Puce您是对的!!!。我测试了它,发现在这种情况下它不会接近。更正了我的答案,谢谢