首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最后{ if (inputStream != null) { inputStream.close();

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

Stack Overflow用户
提问于 2016-08-21 11:49:58
回答 4查看 2.8K关注 0票数 1

我不知道该怎么理解:

代码语言:javascript
复制
{
        if (inputStream **!= null**) {
            inputStream.close();

从这个例子来看:

代码语言:javascript
复制
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正在关闭?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-21 11:53:29

这意味着,每当try块完成(成功与否)时,它将尝试关闭finally块中的流(inputStreamoutputStream),但由于try块在创建BufferedReaderPrintWriter实例时可能失败,因此需要首先检查它是否不是null,否则将得到NPE。

您可以考虑使用try-with-resouces语句来避免检查null和显式调用close()是否会大大简化代码。

代码语言:javascript
复制
try (BufferedReader inputStream = new BufferedReader(new FileReader("xanadu.txt"));
     PrintWriter outputStream = new PrintWriter(new FileWriter("characteroutput.txt")) {
    // your code here
}
票数 3
EN

Stack Overflow用户

发布于 2016-08-21 11:55:03

如果您在问为什么这些代码在finally块中,那么,

这只是为了确保inputStreamoutputStream始终关闭,不管上面的代码是否遇到异常。

,它有什么不同?

区别是在任何例外情况下。如果出现任何异常,那么它将确保在将异常返回到调用此方法的方法之前关闭两个流,而不是简单地返回。

finally块总是会被执行,除非:

  • System.exit被称为
  • 或者JVM崩溃

--这是关闭finally块中的流、数据库或任何其他类似连接的常见实践。这可以确保连接始终关闭。因为如果它们没有处于最后的阻塞状态,并且系统不断地遇到一些或另一个Excpetion,那么它最终将耗尽连接。

票数 1
EN

Stack Overflow用户

发布于 2016-08-21 11:54:49

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

简单地说,只有当对象不是null时才调用close函数--如果对具有空值的对象调用close(),则会遇到null pointer exception

有趣的是finally的使用,它总是被称为是否有异常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39063865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档