Java AutoCloseable interface
Autocloseable interface in java is an interface that is used to indicate that a resource can be automatically closed by the JVM. This is useful for resources that need to be released when they are no longer needed, such as file handles or database connections.
java.lang.AutoCloseable interface is added in java 7 and it works with try-with-resources, which was also introduced in java 7.
try-with-resources allows you to automatically close resources that are opened in a try block. These resources must implement AutoCloseable.
Java docs for AutoCloseable state,
The
close()method of anAutoCloseableobject is called automatically when exiting atry-with-resourcesblock for which the object has been declared in the resource specification header
AutoCloseable interface defines a single method, close(), which takes no arguments and returns no value. This method is called automatically when the resource is no longer needed, and it is the responsibility of the implementer to ensure that the resource is properly cleaned up.
[the_ad id=”651″] AutoCloseable example
Below is a resource that implements AutoCloseable interface and its close() method.
class MyReader implements AutoCloseable {
@Override
public void close() throws Exception {
System.out.println("Close called for " +
this.getClass().getName());
}
} Now, an object of this class can be used in try-with-resources as shown below
try (MyReader reader = new MyReader()) {
// code
} catch (Exception e) {
e.printStackTrace();
} As try block is completed, below message is printed
Close called for com.codippa.MyReader
This means that close() is automatically called when try-with-resources exits.
If you use a resource, in try-with-resources that does not implement AutoCloseable, then a compiler error will be raised as below
The resource type MyReader does not implement java.lang.AutoCloseable
AutoCloseable in java api
All the resources that need to be closed after their use implement AutoCloseable.
Examples of these resources are
java.sql.Connection: represents a database connection.
Readers such as FileReader, BufferedReader etc.
Streams such as FileInputStream, FileOutputStream etc.
java.io.Closeable, which represents a resource that should be closed extends AutoCloseable and all resources mentioned above implement Closeable.
This means that all the resources that you could close in finally block, they can also be used in try-with-resources.
That is all on AutoCloseable interface in java. Hope the article was useful.