如果我在一个throws函数中放一个try / catch,如果出现一个异常?
它是否在catch子句中执行任何操作,抛出异常或两者兼而有之?
添加更多细节,如果内部范围中的异常怎么办? 是从另一个继承,反之亦然?
当帖子不包含参数时,此功能是什么?
示例:
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException{
int number;
try {
number = Integer.parseInt(getParameter(req,"number"));
} catch (Exception e) {
number = 5;
}
}
其中getParameter是我的BaseServlet类中的一个函数,它扩展了HttpServlet:
protected String getParameter(HttpServletRequest req, String parameter)
throws ServletException {
String value = req.getParameter(parameter);
if (isEmptyOrNull(value))
throw new ServletException("Parameter " + parameter + " not found");
return value.trim();
}
答案 0 :(得分:1)
catch子句将处理try块体内抛出的任何Exception
,有效地使throws
声明无意义。
换句话说,如果对getParameter
的调用抛出ServletException
,number
将被设置为5,并且不会在该try-catch语句的主体之外抛出异常。
答案 1 :(得分:1)
如果您选择处理异常(使用try / catch)并解除异常(使用throws子句),编译器会选择处理异常。
在您的情况下,它会捕获 例外并将5
分配给number
。
处理单个catch块中的所有异常是一种不好的做法,即
catch(Exception e)
始终捕获大多数特定例外。
答案 2 :(得分:0)
getParameter()
将抛出ServletException。
post(..)
中的catch子句将处理try块
它将执行以下行:
number = 5;
但我不知道你用数字做什么......
我也会认为你将它重构为:
catch (ServletException e) {
number = 5;
}
只抓住你期待的例外......
答案 3 :(得分:0)
它完全符合那里所写的内容:
getParameter()
会抛出ServletException
此异常将从getParameter()
try
内的catch
/ doPost()
内部会被抓住
catch
阻止将通过调用number = 5
来处理它。
答案 4 :(得分:0)
您正在聊天所有例外情况,
所以一切都好。 number从parseInt()获取值。
如果那将抛出任何异常(通常是NumberFormatException,或者你的ServeletException),那么你就是 达到例外原因并获得
值5
答案 5 :(得分:0)
您的try-catch块将始终运行,除非您的try块激发Throwable。