我不知道如何理解这一点:
<div class="checkbox">
<input id="check1" type="checkbox" name="check">
<label for="check1">Checklist One</label>
<input id="check2" type="checkbox" name="check" checked>
<label for="check2">Checklist two</label>
<input id="check3" type="checkbox" name="check">
<label for="check3">Checklist 3</label>
</div>
来自那个例子:
{
if (inputStream **!= null**) {
inputStream.close();
当有任何数据提供时,inputStream正在关闭???
答案 0 :(得分:3)
这意味着每当try块完成(成功与否)时,它都会尝试关闭inputStream
块中的流(outputStream
和finally
),但作为{{ 1}}阻止在创建try
或BufferedReader
的实例时可能会失败,您需要先检查它是否为PrintWriter
,否则您将获得NPE。
您可以考虑使用try-with-resouces
语句,以避免检查是否null
并明确调用null
,这样可以大大简化您的代码。
close()
答案 1 :(得分:1)
如果你问为什么这段代码在finally
块中,那么,
这只是为了确保始终关闭inputStream
和outputStream
,无论上面的代码是遇到还是没有遇到异常。
它有何不同。
区别在于任何例外情况。如果发生任何异常,那么它将确保在将异常返回到调用此方法的方法之前关闭两个流,而不是简单地返回。
因为始终执行java finally
块,除非:
System.exit
被称为 这是一种常见的做法 ,用于关闭finally
块中的流,数据库或任何其他类似连接。这可确保连接始终关闭。因为如果他们不是最终阻止,并且系统不断遇到某些或其他Excpetion
,那么它最终会用完连接。
答案 2 :(得分:0)
这只是为了避免空指针异常。仅当对象不是null
时才调用这些函数。
简单来说,close
函数仅在对象不为null时调用,否则如果您在具有空值的对象上调用close()
,则会遇到null pointer exception
。
有趣的是finally
的使用,无论是否有任何异常,都会被调用。
答案 3 :(得分:0)
当执行到达finally块时,首先检查inputstream
和outputstream
是否为空,然后关闭两个流以释放资源。
请参阅链接以查看最终尝试:https://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.20.2