java异常处理嵌套方法

时间:2015-04-14 15:48:18

标签: java exception exception-handling

在封闭方法已捕获异常的方法中捕获异常是否是好的设计?例如,在以下代码中,公共方法调用2个私有方法。私有方法已经捕获任何异常并打印出来:

/*The only thing this method does is call the enclosed methods.*/
public Object enclosingmethod()
{
    try
    {
       enclosedmethod1();
       enclosedmethod2();
    }
    catch (Exception e)
    {
       e.printstacktrace();
    }
}


private Object enclosedmethod1()
{
    try
     {
       //some logic
     }
     catch (Exception e)
     {
       e.printstacktrace();
     }
}

private Object enclosedmethod2()
{
    try
     {
       //some logic
     }
     catch (Exception e)
     {
       e.printstacktrace();
     }
}

4 个答案:

答案 0 :(得分:0)

除非附带的方法重新抛出异常,否则它不会在父方法中捕获它。

如果你使用一个好的IDE,他们会告诉你何时不必要地捕获异常(或者,当一个方法需要捕获一个特定的异常时)。

此外,正如其他人所说的那样,你通常不想捕捉到例外情况。明确;您希望捕获try块中代码实际可能抛出的异常。

答案 1 :(得分:0)

是的,您有时会嵌套捕获异常的方法调用,然后在调用嵌套方法的更高级别方法中捕获异常,但是并不像您这样做,因为您很少想捕获异常通常情况下,除非重新抛出,否则您不希望捕获已在嵌套方法调用中处理的相同异常。相反,更好的方法是捕获需要处理的特定异常,而不是随机或通常尝试捕获所有异常。有时内部方法会捕获一个特定的异常,然后抛出一个自己的异常,然后需要通过更高级别的方法来处理。

答案 2 :(得分:0)

不,这不是好设计。特别是在这种情况下它是错误的,因为你在一个catch块中包围enclosedmethod1enclosedmethod2的调用,但是甚至不会在这些中引发异常块,因为所有异常都被抓住了!

特别是不要抓住所有例外的母亲java.lang.Exception

但一如既往取决于此。问自己一个问题:当enclosedmethod1遇到异常时应该发生什么?代码是否应该继续执行?因为如果你抓住它,enclosedmethod2仍将被执行。应该是?我无法告诉你,但也许你可以,因为你知道enclosedmethod1enclosedmethod2应该做什么。

此问题没有一般性答案,因为这取决于您的要求。

但与往常一样,会花时间考虑异常处理

答案 3 :(得分:0)

回答你的问题:不,这不是一个好但浪费的设计。

但顺便说一下。抓住java.lang.Exception(甚至更糟:可投掷)http://pmd.sourceforge.net/pmd-4.3.0/rules/strictexception.html

也是气馁(没有好的设计)