这些代码语句是否相同?它们之间有什么区别吗?
private void calculateArea() throws Exception {
....do something
}
Run Code Online (Sandbox Code Playgroud)
private void calculateArea() {
try {
....do something
} catch (Exception e) {
showException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 139
是的,这是一个巨大的差异 - 后者吞下了例外(无可否认地显示它),而第一个将让它传播.(我假设showException
不会重新抛出它.)
因此,如果您调用第一个方法并且"执行某些操作"失败,则调用者将必须处理该异常.如果调用第二种方法和"做什么"失败,那么调用者就不会看到一个异常在所有...这通常是一件坏事,除非showException
有真正处理的异常,无论固定错了,通常确信这calculateArea
已经达到了目的.
您可以告诉这点,因为你不能说没有第一种方法要么捕捉Exception
自己或宣布你的方法可能会抛出它.
sam*_*aur 20
第一个throws Exception
,所以调用者需要处理Exception
.第二个在Exception
内部捕获和处理,因此调用者不必进行任何异常处理.
Lyl*_*yle 16
是.声明的版本throws Exception
将要求调用代码处理异常,而显式处理异常的版本则不需要.
即,简单地说:
performCalculation();
Run Code Online (Sandbox Code Playgroud)
与将处理异常的负担转移给调用者:
try {
performCalculation();
catch (Exception e) {
// handle exception
}
Run Code Online (Sandbox Code Playgroud)
是的,它们之间存在很大差异.在第一个代码块中,您将异常传递给调用代码.在第二个代码块中,您自己处理它.哪种方法正确完全取决于您正在做什么.在某些情况下,您希望您的代码处理异常(例如,如果找不到文件并且您想要创建它),但在其他情况下,您希望调用代码处理异常(找不到文件)他们需要指定一个新的或创建它.
一般来说,您也不希望捕获一般异常.相反,你只想捕捉特定的,例如FileNotFoundException
或IOException
因为它们可能意味着不同的东西.
归档时间: |
|
查看次数: |
79797 次 |
最近记录: |