Какова новая концепция Autocloseable в блоке try в JDK 1.7
Какова новая концепция Autocloseable в блоке try в JDK 1.7. Это действительно необходимо или просто улучшить что-то в блоке try catch, чтобы сделать его более продвинутым.
3 ответа
Прочитайте документацию о функции пробного использования ресурсов, представленной в Java 7.
try
оператор -with-resources является оператором try, который объявляет один или несколько ресурсов. Ресурс - это объект, который должен быть закрыт после завершения программы. Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора. Любой объект, который реализуетjava.lang.AutoCloseable
, который включает в себя все объекты, которые реализуютjava.io.Closeable
, может быть использован в качестве ресурса.
И Javadoc AutoCloseable#close()
:
Закрывает этот ресурс, отказываясь от любых базовых ресурсов. Этот метод вызывается автоматически для объектов, управляемых
try
с заявлением ресурсов.
Это означает, что вы можете создавать свои собственные подтипы AutoCloseable
ресурсы и использовать их в этом заявлении.
Это позволяет использовать try-with-resources
которая является новой функцией от Java 7.
Старая школа:
InputStream is = null;
try {
is = ...;
// do stuff with is...
} catch (IOException e) {
// handle exception
} finally {
if (is != null) {
try {
is.close();
} catch (IOException innerE) {
// Handle exception
}
}
}
Новая школа:
try (InputStream is = ...) {
// do stuff with is...
} catch (IOException e) {
// handle exception
}
AutoCloseable
объекты могут быть открыты в try
блок (в пределах ()
) и будет автоматически закрыт вместо использования finally
блок как в примере кода выше.
Оператор try-with-resources является оператором try, который объявляет один или несколько ресурсов. Ресурс - это объект, который должен быть закрыт после завершения программы. Оператор try-with-resources обеспечивает закрытие каждого ресурса в конце оператора. Любой объект, который реализует java.lang.AutoCloseable, который включает все объекты, которые реализуют java.io.Closeable, может использоваться в качестве ресурса.
Итак, это означает, что все объекты, которые AutoCloseable
может быть использован таким образом, что означает, что, например, ResultSet
и другие ресурсы могут быть использованы способом "попробуй с ресурсами". ИМО, это упрощает кодирование и удобочитаемость.
Тем не менее, читаемость не является убийственным аргументом о том, почему использовать новый способ. Я считаю, что это простой факт, что ресурсыавтоматически закрыты. При использовании до Java 7 можно было забыть делать нулевые проверки или закрывать базовый ресурс - попытка с ресурсами просто менее подвержена ошибкам.
Но с этим сказал. Не обязательно использовать try-with-resources, все еще возможно использовать его старой школой, хотя я бы не рекомендовал его из-за (так как он является как многословным, так и подверженным ошибкам).
try (BufferedReader br = new BufferedReader(new InputStreamReader)) {
// try block
} catch (IOException e) {
// No need to close resourse. Only handle exception. Resource will be closed automatically
}
Есть много классов, которые доступны в Java, который реализует Autoclosable.
Ниже ссылки представлен список классов, реализующих этот интерфейс.
http://docs.oracle.com/javase/7/docs/api/java/lang/AutoCloseable.html