在封闭方法已捕获异常的方法中捕获异常是否是好的设计?例如,在以下代码中,公共方法调用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();
}
}
答案 0 :(得分:0)
除非附带的方法重新抛出异常,否则它不会在父方法中捕获它。
如果你使用一个好的IDE,他们会告诉你何时不必要地捕获异常(或者,当一个方法需要捕获一个特定的异常时)。
此外,正如其他人所说的那样,你通常不想捕捉到例外情况。明确;您希望捕获try块中代码实际可能抛出的异常。
答案 1 :(得分:0)
是的,您有时会嵌套捕获异常的方法调用,然后在调用嵌套方法的更高级别方法中捕获异常,但是并不像您这样做,因为您很少想捕获异常通常情况下,除非重新抛出,否则您不希望捕获已在嵌套方法调用中处理的相同异常。相反,更好的方法是捕获需要处理的特定异常,而不是随机或通常尝试捕获所有异常。有时内部方法会捕获一个特定的异常,然后抛出一个自己的异常,然后需要通过更高级别的方法来处理。
答案 2 :(得分:0)
不,这不是好设计。特别是在这种情况下它是错误的,因为你在一个catch块中包围enclosedmethod1
和enclosedmethod2
的调用,但是甚至不会在这些中引发异常块,因为所有异常都被抓住了!
特别是不要抓住所有例外的母亲java.lang.Exception
。
但一如既往取决于此。问自己一个问题:当enclosedmethod1
遇到异常时应该发生什么?代码是否应该继续执行?因为如果你抓住它,enclosedmethod2
仍将被执行。应该是?我无法告诉你,但也许你可以,因为你知道enclosedmethod1
和enclosedmethod2
应该做什么。
此问题没有一般性答案,因为这取决于您的要求。
但与往常一样,会花时间考虑异常处理。
答案 3 :(得分:0)
回答你的问题:不,这不是一个好但浪费的设计。
但顺便说一下。抓住java.lang.Exception
(甚至更糟:可投掷)http://pmd.sourceforge.net/pmd-4.3.0/rules/strictexception.html