- 案例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
}
}
答案 0 :(得分:2)
throws
声明用于声明您的方法引发的checked exceptions。
例如,如果我写这段代码:
public void doSomething() throws SQLException {
}
调用此方法的任何代码必须具有SQLException
,Exception
或Throwable
的try / catch块...或者它可以拥有它对其中一个声明拥有throws
声明。
答案 1 :(得分:0)
除非您希望在该方法中立即处理该异常,否则使用throws [specific Exception]
是一种很好的做法,以便可以在代码中进一步处理异常。
在顶部有一个通用的Throwable
捕获并且#34;优雅地崩溃"这是常见的。如果出现问题。
答案 2 :(得分:0)
在这种情况下,没有任何区别,只是你警告编译器你不会抛出异常。
抓住投掷也是一个坏主意"例外" - 在这两种情况下,您都希望处理具有特定含义的特定异常。当你捕获时,使用try块的唯一原因是你期望一个特殊的异常,所以你应该抓住那个。这样,如果出现一些意外的异常,你就不会尝试以错误的方式处理它。 (相反,你的程序失败了,你知道你必须处理的条件)当你投掷时,你想抛出一个特殊的例外,你要么是一个人,要么就是一个标准的例外。一个已知的含义,所以调用函数知道要处理什么。例如,如果您的doSomething可能会抛出ArrayIndexNotFoundException,如果窗口小部件没有frobnicated,您可能希望捕获ArrayIndexNotFoundException并抛出WidgetNotFrobnicatedException。每次抛出异常时,您的javadoc都应准确指定触发该问题的环境,因此您的代码用户有机会解决这种可能的失败。
(有一种情况,当我能看到捕捉异常时,如果你想要在出现意外错误的情况下暂停一些优雅的停止 - 那么,在你的捕获区中,你会记录下来这个问题,可能会提醒开发人员,并提出某种问题"抱歉,错误编号3542已经发生,请重新启动程序"消息。)
答案 3 :(得分:0)
如果你的doSomething方法有机会抛出异常并且你不想捕获它,你应该在方法上添加这个抛出异常。