为什么在没有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>");
}
}
解决方法:
如上所述,这是Java 7及更高版本中的一项功能.尝试使用资源允许跳过写入finally并关闭try-block本身使用的所有资源.如Docs所述
Any object that implements java.lang.AutoCloseable, which includes all objects which implement java.io.Closeable, can be used as a resource.
请参阅此代码示例
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块抛出异常,那么try块的异常就会被压制.
另一方面,如果您使用try-with-resources语句并且try块和try-with-resources语句都抛出异常,那么在这种情况下,try-with-resources语句的异常将被抑制.
正如@Aaron已经在上面回答的那样,我只是想解释一下你.希望能帮助到你.
资料来源:http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
标签:java,try-with-resources 来源: https://codeday.me/bug/20191004/1853151.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。