Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行捕获优先级_Java_Exception_Exception Handling - Fatal编程技术网

Java 执行捕获优先级

Java 执行捕获优先级,java,exception,exception-handling,Java,Exception,Exception Handling,我需要了解java异常处理优先级 我有一个类控制器,一个类节点管理器,一个类名称管理器。 NameManager有一个方法: public LriNode getLriNode(...) throws HttpErrorException { if(condition) throw new HttpErrorException (status); } 类NodeManager在下面的代码中使用前面的方法 public void nodeWriter(...) throws H

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

我有一个类控制器,一个类节点管理器,一个类名称管理器。 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();
        }
    }

}
@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;
}
最后,类控制器在下面使用前面的方法

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

}
@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
时,我希望NodeManager的
nodeWriter()
方法中的try-catch块会对异常执行。发生的情况是,该控件返回到控制器类,并执行其try-catch块。似乎
nodeWriter()
方法中的
抛出HttpErrorException
语句在内部try-catch块上具有优先级


有人能给我解释一下这种异常处理优先系统吗?

在你的代码中,你提到你的
控制器正在处理异常。好的,在
nodeWriter()
方法调用中,您的捕获提示可以重新调用
HttpErrorException

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))
        {
          //LOOK HERE!!! --> here can be thrown an HttpErrorExeption too
        }
        else
        {
            e.printStackTrace();
        }
    }

}

如果这可以重新引发一个
HttpErrorException
,那么调用
nodeWriter()
控制器将处理该异常。

一个Throwable不会传播到处理该类型Throwable的try/catch块之外。检查堆栈跟踪中的行号,这将准确地告诉您异常的起源。(顺便说一句,一些java IDE有一个“analyze stacktrace”功能,允许您直接单击所讨论的类和行号。我从来没有发现这个功能有多大用处,但是这个功能存在,所以一定有人发现它很有用。)

据我所知,没有这样的异常处理优先级系统。正如您所指出的,您可以在NodeWrite的catch语句中引发httpErrorException。我认为是这样的。这是事实:HttpErrorException是我定义的一个自定义异常,用于处理Http通信错误。从上一个注释(5分钟注释编辑问题)继续。事实是:HttpErrorException是我定义的一个自定义异常,用于处理Http通信问题。我使用Spring及其自己的RestTemplate,用于联系网络实体的方法属于此类。不幸的是,这些方法会抛出一个名为HttpClientErrorException的spring框架异常,我把它误认为是我定义的异常。最后,所有的问题都是关于我的分心。谢谢大家抽出时间。