Зачем писать Try без Catch или Finally?
зачем писать Try без улова или, наконец, как в следующем примере?
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet tryse</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet tryse at " + request.getContextPath() + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
2 ответов
как объяснено выше, это функция в Java 7 и за его пределами. try with resources
позволяет пропустить запись finally
и закрывает все ресурсы, используемые в . Как указано в Docs
любой объект, реализующий java.ленг.AutoCloseable, который включает все объекты, реализующие java.Ио.Closeable, можно использовать как ресурс.
посмотреть этот пример кода
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
в этом примере ресурс BufferReader
объект как класс реализует интерфейс java.lang.AutoCloseable
и он будет закрыт, будет ли блок try выполнен успешно или нет, что означает, что вам не придется писать br.close()
явно.
еще одна важная вещь, чтобы заметить здесь это если вы пишете finally
заблокируйте себя и оба ваших try
и finally
блок throw исключение, то исключение из try
блок осилила.
в то время как с другой стороны, если вы используя try-with-resources
утверждение и исключение как try
и блок try-with-resources
заявление тогда в этом случае исключение из try-with-resources
заявление подавляется.
как @Aaron ответил уже выше, я просто попытался объяснить вам. Надеюсь, это поможет.
источник: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
Это новая функция в Java 7 и выше. Без этого, вам понадобится finally
блок, который закрывает ресурс PrintWriter out
. Таким образом, приведенный выше код эквивалентен:
PrintWriter out = null;
try {
PrintWriter out = ...
} finally {
if(null != out) {
try {
out.close();
} catch(Exception e) {} // silently ignore!
}
}
посмотреть оператор try-with-resources