java - 执行捕获优先级

标签 java exception

我需要了解java异常处理优先级。

我有一个类Controller,有一个类NodeManager,有一个类NameManager。 NameManager有一个方法:

public LriNode getLriNode(...) throws HttpErrorException
{
   if(condition)
     throw new HttpErrorException (status); 
}

NodeManager 类在下面的代码中使用前面的方法

public void nodeWriter(...) throws HttpErrorException
{
            ...
    try
    {
        //this can throw an HttpErrorExeption
        lriNode = nameManager.getLriNode(resourceName);
        ...
    }       
    catch (HttpErrorException e)
    {
        if(e.getStatus().name().equals(HttpStatus.NOT_FOUND))
        {
          //here can be thrown an HttpErrorExeption too
           do work
        }
        else
        {
            e.printStackTrace();
        }
    }

}

最后,Controller 类在下面使用前面的方法

@RequestMapping(method=RequestMethod.PUT, value="document/{name}")
public ModelAndView putDocument(@RequestBody String body, @PathVariable String name, HttpServletResponse response, HttpServletRequest request)
{
    Source source = new StreamSource(new StringReader(body));

    try
    {

        NodeManager.nodeWriter(...);
        return new ModelAndView(XML_VIEW_NAME, "document", document);
    }
    catch (HttpErrorException e)
    {
        response.setStatus(e.getStatus().value());
        e.printStackTrace();
    }
    return null;
}

嗯,这就是重点:当 NameManager 抛出 HttpErrorException 时,我希望 NodeManger 的 nodeWriter() 方法中的 try-catch block 能够执行到异常。所发生的情况是,控制权返回到 Controller 类,并执行其 try-catch block 。看来 nodeWriter() 方法中的 throws HttpErrorException 语句优先于内部 try-catch block 。

谁能给我解释一下这样的异常处理优先级系统吗?

最佳答案

Throwable 不会在处理该类型 Throwable 的 try/catch block 之外传播。检查堆栈跟踪中的行号,这将告诉您异常的确切来源。 (顺便说一句,一些 Java IDE 有一个“分析堆栈跟踪”功能,允许您直接单击相关的类和行号。我从未发现此功能有多大用处,但该功能存在,所以一定有人发现它很有用。 )

关于java - 执行捕获优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7233906/

相关文章:

java - Spring @Cacheable 使用 hset

java - Log4j 2 的断路器

java - 从 Java 堆栈跟踪中清除噪音

android - 文本输入布局错误 : Couldn't resolve resource @string/path_password_strike_through

wpf - 为什么我的 WPF DataGrids 之一会给出 "' EditItem' is not allowed for this view"异常?

java - 行为不一致

Java Calendar对象,分别设置日期和时间

java - 如何用文本文件中的字符填充二维字符数组

java - 如何在 boolean 方法中抛出三个异常?

java - quartz 2.1.5 + jboss 5.0.1 -> 作业类 -> classNotFoundException