我对链异常有疑问
try{ } catch(Exception e) { throw new SomeException(); }
如果我喜欢这样的话 我的eclipse会在行抛出新的SomeException(); 陈述“未处理的例外” 我必须把像
这样的东西try{ } catch(Exception e) {
try{ throw new SomeException(); } catch(Exception e){}
}
为什么必须这样做 因为我读过.example http://java.sys-con.com/node/36579的教程,不必这样做
答案 0 :(得分:8)
如果异常是checked exception,则需要声明方法throws
另一个异常。
(“未经检查的异常类是RuntimeException类及其子类,以及类Error及其子类。所有其他异常类都是经过检查的异常类。” - Java Language Specification, Second Edition, Section 11.2)
例如,而不是:
void someMethod {
try {
// Do something that raises an Exception.
} catch (Exception e) {
throw new SomeException(); // Compile error.
}
}
需要在方法声明中添加throws
:
void someMethod throws SomeException {
try {
// Do something that raises an Exception.
} catch (Exception e) {
throw new SomeException(); // No problem.
}
}
答案 1 :(得分:5)
这取决于SomeException是否是已检查的异常。如果是(它扩展了Exception而不是RuntimeException),那么你必须在方法上声明它或者抛出RuntimeException。
这就是你的代码应该是这样的:
...) throws SomeException {
....
try {
....
} catch (Exception e) {
throw new SomeException(e);
}
如果某个异常没有带有异常的构造函数,那么执行以下操作:
throw (SomeException) new SomeException().initCause(e);
这样,当最终发现异常时,您就会知道问题的根本原因。
答案 2 :(得分:3)
您的方法必须声明它可能会抛出该异常。所以,你必须添加:
throws SomeException {
在方法标题的末尾。
答案 3 :(得分:1)
您需要在方法声明中添加“throws SomeException”。除了从RuntimeException下降的异常之外,您需要指定方法抛出的任何异常类型。