2014-11-21 23 views
2

- 案例1和2的效果相同,为什么需要在方法签名中添加异常声明?在方法签名中解释“抛出异常”的效果是什么


//情况1

public void doSomething() throws Exception { 
     //do Something 
    }  
public void Caller() { 
    try { 
    doSomething(); 
    } catch (Exception e) { 
    //handle the exception 
    } 
} 

//情况下2

public void doSomething() { 
     //do Something 
    }  
public void Caller() { 
    try { 
    doSomething(); 
    } catch (Exception e) { 
    //handle the exception 
    } 
} 

参考: what is the use of throws Exception

回答

0

在这种情况下,除了您提醒编译器出现一个您不打算抛出的异常外,没有区别。

抓到抛出的“异常”也是一个坏主意 - 在这两种情况下,您都希望处理具有特定含义的特定异常。当你捕捉时,使用try块的唯一理由是如果你期待一个特定的异常,所以你应该抓住那个。这样,如果出现一些意外的异常,您不会尝试以错误的方式处理它。 (相反,你的程序失败了,而且你知道有一个条件你必须处理)当你抛出时,你想抛出一个特定的异常,不论是你构成的还是具有已知含义的标准异常,调用函数知道要处理什么。例如,如果您的doSomething可能会抛出一个ArrayIndexNotFoundException,如果这些小部件未被修改,您可能需要捕获ArrayIndexNotFoundException并抛出WidgetNotFrobnicatedException。任何时候你抛出一个异常,你的javadoc应该确切地指定什么情况会触发这个问题,所以你的代码的用户有机会解决这个可能的失败。

(有一种情况我可以看到捕捉异常,这就是说,如果你想淡出某些优雅的停顿,如果事情意外出错 - 在这种情况下,在你的catch块你会记录这个问题,一个开发人员,并抛出某种“对不起,错误号3542发生,请重新启动程序”的消息。)

+0

你的答案是明确的,还提供有用的信息和建议,而不是我的问题,非常感谢! – kevin 2014-11-22 17:40:31

0

除非是要立即处理该方法异常,最好使用throws [specific Exception]这样的外在因素在代码中可以进一步处理。

有一个普通的Throwable捕捉在顶部的“优雅地崩溃”,以防出现问题时有点常见。

+0

这不是用好的做法一个'抛出Exception'以往,原因很简单,这混淆了什么异常实际上可以抛出的力量*所有的*来电者有一个过于笼统'抓(例外e)'或传播l使用它自己的'抛出异常'清晰度。除非你的意思是他们应该使用'throws [一些特定的例外]'? – jpmc26 2014-11-21 19:26:57

+0

是的,我的意思是抛出一些特定的异常,因此可以在调用堆栈中处理更高的值。 – 2014-11-21 19:34:26

+0

如果您在答案中澄清说明,我将删除downvote。 (我不能删除它,直到你编辑。) – jpmc26 2014-11-21 19:56:14

0

如果您的doSomething方法,有机会抛出异常,而且您不想捕获它,你应该添加这个抛出异常的方法。

2

throws声明用于声明您的方法抛出哪个checked exceptions

举例来说,如果我写这样的代码:

public void doSomething() throws SQLException { 
} 

调用此方法必须有一个try/catch块为SQLExceptionException,或Throwable任何代码......或者也可以拥有自己throws声明的那些3.

相关问题