Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在JDK 7中,使用try with resources特性可以自动关闭文件?_Java - Fatal编程技术网

Java 为什么在JDK 7中,使用try with resources特性可以自动关闭文件?

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

当我阅读本文时,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 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您是对的!!!。我测试了它,发现在这种情况下它不会接近。更正了我的答案,谢谢