Ответ 1
Как объяснялось выше, это функция Java 7 и выше. try with resources
позволяет пропустить запись finally
и закрыть все ресурсы, используемые в try-block
. Как указано в Docs
Любой объект, реализующий java.lang.AutoCloseable, который включает в себя все объекты, которые реализуют java.io.Closeable, может использоваться как ресурс.
См. этот пример кода
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
В этом примере ресурс BufferReader
object, так как класс реализует интерфейс java.lang.AutoCloseable
, и он будет закрыт, будет ли блок try успешно выполнен или нет, что означает, что вам не нужно явно писать br.close()
.
Еще одна важная вещь, которую следует отметить здесь, заключается в том, что если вы пишете блок finally
самостоятельно и как исключение блока try
, так и finally
, исключение из блока try
подавлено.
С другой стороны, если вы используете оператор try-with-resources
, а исключение вызывается как с помощью try
block, так и try-with-resources
, тогда в этом случае исключение из оператора try-with-resources
подавляется.
Как уже сказал Аарон уже выше, я просто попытался вас объяснить. Надеюсь, что это поможет.
Источник: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html