我知道它是为了资源而运作的。 但是,如果没有检测到其他用途,它会不会自动关闭,就像其他对象一样? 出于同样的原因,我从不解构一个单一的对象,这是一个坏习惯吗? 非常感谢你。
答案 0 :(得分:1)
Scanner
打开底层操作系统的文件描述符(或文件通道或流),通常以非托管(通常为C
语言)编写。
流保持打开状态,有时可以保持打开状态,直到内核决定关闭它(例如,在程序完成执行后......依赖于高度实现)。
因此明确关闭资源是一个好主意。
答案 1 :(得分:1)
java.util.Scanner.close()
方法关闭此扫描程序。如果此扫描程序尚未关闭,那么如果其底层可读也实现了Closeable
接口,则将调用可读的close方法。如果此扫描仪已关闭,则调用此方法将无效。
答案 2 :(得分:0)
我们需要关闭扫描仪,因为
因此,建议使用close()。
答案 3 :(得分:0)
创建新扫描仪时,从技术上讲,您将保留对资源的引用。可以说,我们正在使用InputStream读取文件,您将获得一个指向InputStream对象的指针。
当我们读完对象/文件并且处理程序仍处于打开状态时,即使我们不需要它,我们仍然引用该对象。调用close explicity要求释放资源,因为我们没有使用它。 这样做有点容易 - 如果我们对资源有约束(例如:对DB的约束,允许500次读取)以及GC的更容易,因为未使用的引用被释放并且可能需要更少的时间。
在SQLConnection中更好的想象方式。如果您不使用它,为什么还要保留一个连接?