Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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 最后{if(inputStream!=null){inputStream.close();_Java_Bufferedreader_Ioexception - Fatal编程技术网

Java 最后{if(inputStream!=null){inputStream.close();

Java 最后{if(inputStream!=null){inputStream.close();,java,bufferedreader,ioexception,Java,Bufferedreader,Ioexception,我不知道如何理解这一点: { if (inputStream **!= null**) { inputStream.close(); 从这个例子来看: public class CopyLines { public static void main(String[] args) throws IOException { BufferedReader inputStream = null; PrintWriter outputStream

我不知道如何理解这一点:

{
        if (inputStream **!= null**) {
            inputStream.close();
从这个例子来看:

public class CopyLines {
public static void main(String[] args) throws IOException {

    BufferedReader inputStream = null;
    PrintWriter outputStream = null;

    try {
        inputStream = new BufferedReader(new FileReader("xanadu.txt"));
        outputStream = new PrintWriter(new FileWriter("characteroutput.txt"));

        String l;
        while ((l = inputStream.readLine()) != null) {
            outputStream.println(l);
        }
    } finally {
        if (inputStream != null) {
            inputStream.close();
        }
        if (outputStream != null) {
            outputStream.close();
        }
    }
}}

当提供任何数据时,inputStream将被关闭???

这意味着无论尝试块是否成功完成,它都将尝试关闭finally块中的streams inputStream和outputStream,但由于尝试块在创建BufferedReader或PrintWriter实例时可能失败,您需要首先检查它是否成功不为null,否则您将获得NPE

可以考虑使用语句来避免检查NULL和调用CHILL显式,这样可以简化代码。

try (BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
     PrintWriter outputStream = new PrintWriter(new FileWriter("characteroutput.txt")) {
    // your code here
}

这意味着,无论try块是否成功完成,它都将尝试关闭finally块中的streams inputStream和outputStream,但由于try块在创建BufferedReader或PrintWriter实例时可能会失败,您需要首先检查它是否为null,否则您将获得NPE

可以考虑使用语句来避免检查NULL和调用CHILL显式,这样可以简化代码。

try (BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
     PrintWriter outputStream = new PrintWriter(new FileWriter("characteroutput.txt")) {
    // your code here
}

这只是为了避免空指针异常。仅当对象不为空时才调用函数

简单地说,只有当对象不为null时才调用close函数,否则,如果在具有null值的对象上调用close,则会遇到null指针异常


有趣的是finally的用法,无论是否存在异常,它都会被调用。

这只是为了避免空指针异常。只有当对象不为空时才调用函数

简单地说,只有当对象不为null时才调用close函数,否则,如果在具有null值的对象上调用close,则会遇到null指针异常


有趣的是finally的用法,无论是否存在异常,它都会被调用。

当执行到达finally块时,首先检查inputstream和outputstream是否为null,然后关闭这两个流以释放资源


请参阅有关检查try with finally的链接:

当执行到达finally块时,首先检查inputstream和outputstream是否为null,然后关闭这两个流以释放资源


请参考链接以检查try with finally:

如果您询问为什么此代码位于finally块中,那么

这只是为了确保inputStream和outputStream始终处于关闭状态,不管上面的代码是否遇到异常

这有什么不同

不同之处在于任何异常期间。如果发生任何异常,它将确保在将异常返回给调用此方法的方法之前关闭两个流,而不是简单地返回

bacause java的finally块始终执行,除非:

调用System.exit 或JVM崩溃
这是在finally块中关闭流、数据库或任何其他类似连接的常见做法。这确保了连接始终处于关闭状态。因为如果它们不在finally块中,并且系统不断遇到某些或其他异常,那么它最终将耗尽连接。

如果您问为什么会这样代码在finally块中,然后

这只是为了确保inputStream和outputStream始终处于关闭状态,不管上面的代码是否遇到异常

这有什么不同

不同之处在于任何异常期间。如果发生任何异常,它将确保在将异常返回给调用此方法的方法之前关闭两个流,而不是简单地返回

bacause java的finally块始终执行,除非:

调用System.exit 或JVM崩溃
这是在finally块中关闭流、数据库或任何其他类似连接的常见做法。这确保了连接始终处于关闭状态。因为如果它们不在finally块中,并且系统不断遇到某些或其他异常,则最终将耗尽连接。

if语句将避免NullPointerException。这是什么版本的Java?这看起来像是1.7之前的代码它来自Java文档if语句是为了避免NullPointerException。那是什么版本的Java?这看起来像是1.7之前的代码它来自Java文档不,我对finally block不感兴趣。只!=null使我感兴趣。不,我对finally不感兴趣block.Only!=null使我感兴趣。好的。根据Java文档,我是否正确地理解了它:readline读取一行,如果它以\n或其他适合此方法的任何内容结尾,则该方法停止读取并返回null,因此JVM正确地处理此过程,并且最终不会发生资源泄漏?可能在lin期间e正在读取一些i/o
错误发生,读取未正确完成,winh null,然后block最终完成了他的工作?我不确定,我明白你的意思,但事实上,它会关闭流,无论发生什么,都会阻止泄漏。我正在试图理解读线是如何工作的。根据JavaDocs,我不确定当读取任何行结束指示符时,corectly end readLine是否以null结尾,它被解析到JVM,或者它是null解析到JVM,只有当我们有一个EOF没有读任何行的情况下…如果readLine返回null,那么结尾的null是变量l而不是stream无论是否返回readLine null,stream实例都不会为null,所以它将在finally块中按预期关闭OK。根据Java文档,我是否正确地理解了它:readline读取一行,如果它以\n或其他适合此方法的内容结尾,则此方法停止读取并返回null,因此JVM正确地处理此过程,并且最终不会发生资源泄漏?有可能在行读取过程中发生了一些i/o错误,并且读取未正确完成winh null,然后block最终完成了他的工作?我不确定,我明白你的意思,但实际上它会关闭流,无论发生什么,都会阻止泄漏。我正在试着理解读取行是如何工作的。根据JavaDocs,我不确定当读取任何行结束指示符时,corectly end readLine是否以null结尾,它被解析为JVM,或者它是null解析为JVM,只有当我们有一个EOF没有读取任何行的情况下…如果readLine返回null,那么结尾的null是变量l而不是stream无论是否返回readLine null,stream实例都不会为null,因此它将在finally块中按预期关闭