什么是解释"抛出异常的效果"在方法签名中

时间:2014-11-21 17:58:35

标签: 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

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

参考: what is the use of throws Exception

4 个答案:

答案 0 :(得分:2)

throws声明用于声明您的方法引发的checked exceptions

例如,如果我写这段代码:

public void doSomething() throws SQLException {
}

调用此方法的任何代码必须具有SQLExceptionExceptionThrowable的try / catch块...或者它可以拥有它对其中一个声明拥有throws声明。

答案 1 :(得分:0)

除非您希望在该方法中立即处理该异常,否则使用throws [specific Exception]是一种很好的做法,以便可以在代码中进一步处理异常。

在顶部有一个通用的Throwable捕获并且#34;优雅地崩溃"这是常见的。如果出现问题。

答案 2 :(得分:0)

在这种情况下,没有任何区别,只是你警告编译器你不会抛出异常。

抓住投掷也是一个坏主意"例外" - 在这两种情况下,您都希望处理具有特定含义的特定异常。当你捕获时,使用try块的唯一原因是你期望一个特殊的异常,所以你应该抓住那个。这样,如果出现一些意外的异常,你就不会尝试以错误的方式处理它。 (相反,你的程序失败了,你知道你必须处理的条件)当你投掷时,你想抛出一个特殊的例外,你要么是一个人,要么就是一个标准的例外。一个已知的含义,所以调用函数知道要处理什么。例如,如果您的doSomething可能会抛出ArrayIndexNotFoundException,如果窗口小部件没有frobnicated,您可能希望捕获ArrayIndexNotFoundException并抛出WidgetNotFrobnicatedException。每次抛出异常时,您的javadoc都应准确指定触发该问题的环境,因此您的代码用户有机会解决这种可能的失败。

(有一种情况,当我能看到捕捉异常时,如果你想要在出现意外错误的情况下暂停一些优雅的停止 - 那么,在你的捕获区中,你会记录下来这个问题,可能会提醒开发人员,并提出某种问题"抱歉,错误编号3542已经发生,请重新启动程序"消息。)

答案 3 :(得分:0)

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