java 异常处理嵌套方法

java exception handling nested methods

在封闭方法已经捕获异常的方法中捕获异常是好的设计吗?例如,在下面的代码中,一个 public 方法调用了 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();
     }
}

在父方法中捕获它不会为您做任何事情,除非封闭的方法重新抛出异常。

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

此外,正如其他人所说,您通常不想明确地捕捉 'Exception';您需要捕获 try 块中的代码实际上可能抛出的异常。

是的,有时您会嵌套捕获异常的方法调用,然后也在调用嵌套方法的更高级别的方法中捕获异常,但是不像您那样做,因为您很少想如此普遍地捕获异常,并且您不希望捕获已经在嵌套方法调用中处理过的相同异常,除非它被重新抛出。相反,更好的方法是在需要处理的地方捕获 特定的 异常,而不是随机地或一般地尝试在所有地方捕获所有异常。有时内部方法会捕获一个特定的异常,然后抛出它们自己的异常之一,然后需要由更高级别的方法处理。

不,这不是好的设计。特别是在这种情况下,它是错误的,因为您将 enclosedmethod1enclosedmethod2 的调用包围在一个 catch 块中,但是 甚至不抛出异常 这些块,因为所有异常都被捕获了!

尤其不要抓到所有异常之母,java.lang.Exception.

但一如既往地视情况而定。问自己一个问题:当 enclosedmethod1 遇到异常时应该发生什么?代码应该继续执行吗?因为如果你抓住它,enclosedmethod2 仍然会被执行。应该是?我不能告诉你,但也许你可以,因为你知道 enclosedmethod1enclosedmethod2 应该做什么。

这个问题没有统一的答案,因为这取决于你的要求。

但一如既往,花点时间考虑异常处理