我没有得到任何令人满意的答案,关于如何在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块中的异常。如何使用它?
答案 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>
。