如何在java中处理丢失的异常

时间:2013-05-28 03:22:36

标签: java exception

在以下代码中抛出两个异常[FatalException和MyException]。 Trivial Myexception(覆盖?)使FatalException丢失。如何?

如何处理这种情况?

    try{
        try {
        throw new FatalException("Important");
        } 
    finally
    {              
          throw new MyException("trivial");
    }
    }catch (Exception ex) {
        ex.printStackTrace();
    }
}

没有内部try块的catch类。

(文章提到了java中的一个缺陷例外!)所以应该有一些方法可以克服它?也许最近的标准改变了它?

3 个答案:

答案 0 :(得分:2)

没有办法优雅地处理这个问题:finally接管Java中的控件,让你做任何你想做的事,even return normally from a try block that threw an exception

如果必须处理内部异常,则需要为它编写许多可能很脆弱的代码:

Exception important = null;
try{
    try {
        important = new FatalException("Important");
    } finally {
        if (important != null) throw important;
        throw  new MyException("trivial");
    }
} catch (Exception ex) {
    ex.printStackTrace();
}

你最好的解决办法就是不要写那样的代码。

答案 1 :(得分:0)

这是因为执行的顺序。所有意图和目的的初始throw是方法的事实return语句(读取:退出点),但因为它位于try块内,finally块在方法返回(with a few exceptions)之前,finally块内的代码保证运行。因此,在方法return / throw之前,会抛出不同的异常,这是一种更新,更快的方法返回。

处理这种情况的方法永远不会进入它。您应该意识到这就是Java的行为方式,并避免在这个角落编程。

答案 2 :(得分:0)

我想这可能是你如何嵌套异常的正确结构。

try
{
    // Some codes to be tried over here.
}
catch(FatalException fe)
{
    System.out.println("Fatal Exception occurred.");
}
catch(Exception e)
{
    System.out.println("Error! ");
}
catch(MyException me){}

通过这种方式,可以相应地捕获异常。