尝试/捕获抛出功能

时间:2012-11-22 20:15:48

标签: java exception exception-handling try-catch throws

如果我在一个throws函数中放一个try / catch,如果出现一个异常?

  1. 它是否在catch子句中执行任何操作,抛出异常或两者兼而有之?

  2. 添加更多细节,如果内部范围中的异常怎么办? 是从另一个继承,反之亦然?

  3. 当帖子不包含参数时,此功能是什么?

  4. 示例:

     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();
    }
    

6 个答案:

答案 0 :(得分:1)

catch子句将处理try块体内抛出的任何Exception,有效地使throws声明无意义。

换句话说,如果对getParameter的调用抛出ServletExceptionnumber将被设置为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)

它完全符合那里所写的内容:

  1. getParameter()会抛出ServletException

  2. 此异常将从getParameter()

  3. 中逃脱
  4. try内的catch / doPost()内部会被抓住

  5. catch阻止将通过调用number = 5来处理它。

答案 4 :(得分:0)

您正在聊天所有例外情况,
所以一切都好。 number从parseInt()获取值。

如果那将抛出任何异常(通常是NumberFormatException,或者你的ServeletException),那么你就是 达到例外原因并获得

值5

答案 5 :(得分:0)

您的try-catch块将始终运行,除非您的try块激发Throwable。