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 块中的代码实际上可能抛出的异常。
是的,有时您会嵌套捕获异常的方法调用,然后也在调用嵌套方法的更高级别的方法中捕获异常,但是不像您那样做,因为您很少想如此普遍地捕获异常,并且您不希望捕获已经在嵌套方法调用中处理过的相同异常,除非它被重新抛出。相反,更好的方法是在需要处理的地方捕获 特定的 异常,而不是随机地或一般地尝试在所有地方捕获所有异常。有时内部方法会捕获一个特定的异常,然后抛出它们自己的异常之一,然后需要由更高级别的方法处理。
不,这不是好的设计。特别是在这种情况下,它是错误的,因为您将 enclosedmethod1
和 enclosedmethod2
的调用包围在一个 catch 块中,但是 甚至不抛出异常 这些块,因为所有异常都被捕获了!
尤其不要抓到所有异常之母,java.lang.Exception
.
但一如既往地视情况而定。问自己一个问题:当 enclosedmethod1
遇到异常时应该发生什么?代码应该继续执行吗?因为如果你抓住它,enclosedmethod2
仍然会被执行。应该是?我不能告诉你,但也许你可以,因为你知道 enclosedmethod1
和 enclosedmethod2
应该做什么。
这个问题没有统一的答案,因为这取决于你的要求。
但一如既往,花点时间考虑异常处理。
在封闭方法已经捕获异常的方法中捕获异常是好的设计吗?例如,在下面的代码中,一个 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 块中的代码实际上可能抛出的异常。
是的,有时您会嵌套捕获异常的方法调用,然后也在调用嵌套方法的更高级别的方法中捕获异常,但是不像您那样做,因为您很少想如此普遍地捕获异常,并且您不希望捕获已经在嵌套方法调用中处理过的相同异常,除非它被重新抛出。相反,更好的方法是在需要处理的地方捕获 特定的 异常,而不是随机地或一般地尝试在所有地方捕获所有异常。有时内部方法会捕获一个特定的异常,然后抛出它们自己的异常之一,然后需要由更高级别的方法处理。
不,这不是好的设计。特别是在这种情况下,它是错误的,因为您将 enclosedmethod1
和 enclosedmethod2
的调用包围在一个 catch 块中,但是 甚至不抛出异常 这些块,因为所有异常都被捕获了!
尤其不要抓到所有异常之母,java.lang.Exception
.
但一如既往地视情况而定。问自己一个问题:当 enclosedmethod1
遇到异常时应该发生什么?代码应该继续执行吗?因为如果你抓住它,enclosedmethod2
仍然会被执行。应该是?我不能告诉你,但也许你可以,因为你知道 enclosedmethod1
和 enclosedmethod2
应该做什么。
这个问题没有统一的答案,因为这取决于你的要求。
但一如既往,花点时间考虑异常处理。