java 7在单个catch块中处理多个异常

时间:2018-04-18 14:39:38

标签: java-7

我没有得到任何令人满意的答案,关于如何在java 7中的处理单个catch块中的多个异常时维护异常层次结构。我在下面描述了一些场景。

Scen - 1:

 try
    {
      Class.forName("abc");
    }  
    catch(ClassNotFoundException e)
    {
      System.out.println(e);    
    }

在上面的场景中工作正常。来到第二个场景。

Scen - 2:

 try
    {
      Class.forName("abc");
    }  
    catch(ReflectiveOperationException e)
    {
      System.out.println(e);    
    }

在上面的场景中工作正常,因为ReflectiveOperationException是 ClassNotFoundException 的超类。来到第三种情况。

Scen - 3:

try
{
  Class.forName("abc");
}  
catch(Exception e)
{
  System.out.println(e);    
}

在上面的场景中,它显示编译时错误。我不明白为什么它显示错误。由于 Exception ClassNotFoundException 的超类,因此不应显示任何错误。再来第四个场景。

Scen - 4:

 try
    {
      Class.forName("abc");
    }  
    catch(Throwable e)
    {
      System.out.println(e);    
    }

在上面的场景中,它运行正常。

有人可以解释一下上述情况吗? 另一件事是我想在java 7中使用all catch(ClassNotFoundException,ReflectiveOperationException,Exception,Throwable)以及单个catch块中的异常。如何使用它?

1 个答案:

答案 0 :(得分:0)

在所有4种情况下,它都必须编译良好。我自己尝试过,所有情况都很好。 关于第二个问题,您不能在单个catch块中使用所有4个异常,因为它们都通过父子关系关联(Throwable是Exception的父级,Exception是ReflectiveOperationException的父级,而ReflectiveOperationException是ClassNotFoundException的父级) 。尝试在单个catch块中使用所有4个模块时,会出现编译错误The exception <any_child_exception> is already caught by the alternative <its_parent_exception>