public interface AutoCloseable
AutoCloseable
对象的close()
方法在退出已在资源规范头中声明对象的try
-with-resources块时自动调用。
这种结构确保迅速释放,避免资源耗尽异常和可能发生的错误。
实际上,基类实现自动关闭是可能的,实际上是可行的,尽管不是所有的子类或实例都将保存可释放的资源。 对于必须以完全一般性操作的代码,或者当知道AutoCloseable
实例需要资源释放时,建议使用try
资源结构。 然而,使用设施,例如当Stream
同时支持I / O基和非I / O基的形式, try
-with资源块是一般不必要使用非I / O基形式时。
void close() throws 异常
try
-with-resources语句管理的对象上自动调用此方法。
虽然这个接口方法被声明为抛出异常
, 强烈建议实施者声明close
方法的具体实现来抛出更多特定的异常,或者如果关闭操作不能失败,则完全不会抛出任何异常。
关闭操作可能失败的情况需要执行人员的注意。 强烈建议放弃基础资源,并将资源内部标记为封闭资源,然后再投出异常。 close
方法不太可能被多次调用,因此可以确保资源及时释放。 此外,它减少了当资源包裹或被另一资源包装时可能出现的问题。
强烈建议这个接口的实现者不要使用close
方法抛出InterruptedException
。 此异常与线程的中断状态相互作用,如果InterruptedException
为suppressed,则可能会发生运行时行为不当 。 更一般来说,如果这将导致异常被抑制的问题, AutoCloseable.close
方法不应该抛出异常。
请注意,与close
的方法Closeable
,这close
不需要方法为幂等。 换句话说, close
调用这个close
方法可能会有一些可见的副作用,不像Closeable.close
,如果调用Closeable.close
,则不需要任何效果。 但是,强烈建议这个界面的实现者使他们的close
方法是幂等的。
异常
- 如果此资源无法关闭