为什么Scanner.close()在Java中有用?

时间:2017-03-28 04:44:53

标签: java java.util.scanner

我知道它是为了资源而运作的。 但是,如果没有检测到其他用途,它会不会自动关闭,就像其他对象一样? 出于同样的原因,我从不解构一个单一的对象,这是一个坏习惯吗? 非常感谢你。

4 个答案:

答案 0 :(得分:1)

Scanner打开底层操作系统的文件描述符(或文件通道或流),通常以非托管(通常为C语言)编写。

流保持打开状态,有时可以保持打开状态,直到内核决定关闭它(例如,在程序完成执行后......依赖于高度实现)。

因此明确关闭资源是一个好主意。

答案 1 :(得分:1)

java.util.Scanner.close()方法关闭此扫描程序。如果此扫描程序尚未关闭,那么如果其底层可读也实现了Closeable接口,则将调用可读的close方法。如果此扫描仪已关闭,则调用此方法将无效。

答案 2 :(得分:0)

我们需要关闭扫描仪,因为

  1. 它使基础可读对象(输入源)空出来以帮助垃圾收集。
  2. 不允许对scanner对象进行更多操作,这将导致iIllegalStateException。
  3. 因此,建议使用close()。

答案 3 :(得分:0)

创建新扫描仪时,从技术上讲,您将保留对资源的引用。可以说,我们正在使用InputStream读取文件,您将获得一个指向InputStream对象的指针。

当我们读完对象/文件并且处理程序仍处于打开状态时,即使我们不需要它,我们仍然引用该对象。调用close explicity要求释放资源,因为我们没有使用它。 这样做有点容易 - 如果我们对资源有约束(例如:对DB的约束,允许500次读取)以及GC的更容易,因为未使用的引用被释放并且可能需要更少的时间。

在SQLConnection中更好的想象方式。如果您不使用它,为什么还要保留一个连接?