我有一个方法doSomething()
,它有一个try catch块,我在其中调用另一个方法。
public void doSomething()
{
try
{
doSomethingElse();
}
catch
{
// catch implementation goes here
}
}
在另一个方法doSomethingElse()
中我没有任何try catch块。我依靠main方法的try-catch来处理异常。如果doSomethingElse()
中有任何例外,它们将被冒泡到方法doSomething的try-catch块。
这种方法有什么问题吗?
感谢您的时间。
答案 0 :(得分:5)
这是完全合法的。
让异常冒泡到你可以知道如何处理它们。
最好不要使用不添加任何内容的try / catch块来丢弃代码。
但是,使用空的catch块是不好的做法(尽管我假设您发布的代码是省略catch块代码的简化版本。)
答案 1 :(得分:2)
没错。
正如其他人所说,不要吞下例外。抛出 new 异常也是一个好主意;相反,它只是catch (Exception)
和throw
。当然,还应该注意尝试并特定于异常,而不仅仅使用默认的Exception
。
答案 2 :(得分:2)
很臭。捕获异常需要您恢复程序状态,就好像从未调用过doSomethingElse()一样。这在很大程度上取决于方法的作用,但编写一个没有任何副作用的方法通常是很不寻常的。如果有,则需要取消这些副作用。只有doSomethingElse()可以这样做,doSomething()方法无法猜测实际执行了多少副作用。因而无法可靠地恢复状态。
当您捕获所有异常时尤其如此。你也会抓住那些讨厌的人。与AccessViolation或FatalExecutionEngineError类似,使CLR本身处于未知状态的异常,您永远无法恢复它。接下来发生的事情是非常不可预测的。只有幸运的话,你才会得到一些额外的例外。诊断它们是不可能的,你扔掉了有价值的信息。
答案 3 :(得分:1)
这是确定,但在;
doSomethingElse()