Java 什么是明确的效果,即;“抛出异常”;在方法签名中
--案例1和案例2的效果相同,为什么需要在方法签名中添加异常声明Java 什么是明确的效果,即;“抛出异常”;在方法签名中,java,exception,signature,throw,Java,Exception,Signature,Throw,--案例1和案例2的效果相同,为什么需要在方法签名中添加异常声明 //案例1 public void doSomething() throws Exception { //do Something } public void Caller() { try { doSomething(); } catch (Exception e) { //handle the exception } } //案例2 publ
//案例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
}
}
参考:
除非您希望在该方法中立即处理异常,否则最好使用
抛出[特定异常]
,以便在代码中进一步处理异常
在顶部有一个通用的
可丢弃的
catch是很常见的,它在出现错误时会“优雅地崩溃”。在这种情况下,除了提醒编译器一个不打算抛出的异常之外,没有什么区别
捕获抛出“异常”也是个坏主意——在这两种情况下,您都希望处理具有特定含义的特定异常。在捕获时,使用try块的唯一原因是如果您预期出现特定异常,那么您应该捕获该异常。这样,如果出现意外异常,您就不会试图以错误的方式处理它。(相反,你的程序失败了,你知道你必须处理一个条件)当你抛出时,你想抛出一个特殊的异常,不管是你自己创建的,还是一个具有已知含义的标准异常,因此调用函数知道该处理什么。例如,如果您的doSomething可能会在小部件未初始化的情况下引发ArrayIndexNotFoundException,则您可能希望捕获ArrayIndexNotFoundException并引发WidgetNotFrobIncatedException。每当抛出异常时,javadoc都应该指定触发该问题的具体情况,这样代码的用户就有机会解决这个可能的故障
(有一种情况下,我可以看到捕获异常,那就是如果出现意外错误,您希望淡入优雅的停顿状态-在这种情况下,在捕获块中,您将记录问题,可能会提醒开发人员,并抛出某种“抱歉,发生了错误号3542,请重新启动程序”消息。)如果您的doSomething方法有机会抛出异常,但您不想捕获它,则应在该方法上添加此抛出异常。使用
抛出声明来声明您的方法抛出的异常
例如,如果我编写以下代码:
public void doSomething() throws SQLException {
}
调用此方法的任何代码必须为SQLException
、Exception
或Throwable
具有try/catch块。。。或者它可以为这三种类型中的一种使用自己的throws
声明。使用throws Exception
是不好的做法,原因很简单,这会混淆实际可以抛出的异常,并迫使所有调用方都有一个过度通用的捕获(异常e)
或使用其自身的引发异常来传播缺乏清晰性。除非你的意思是他们应该使用抛出[某些特定的异常]
?是的,我的意思是抛出一些特定的异常,以便可以在呼叫堆栈的更高层处理。如果你在回答中澄清这一点,我将删除否决票。(在您编辑之前,我无法删除它。)您的答案很清楚,并且除了我的问题之外,还提供了有用的信息和建议,非常感谢!!