java链异常

时间:2009-06-03 02:48:02

标签: java

我对链异常有疑问

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的教程,不必这样做

4 个答案:

答案 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下降的异常之外,您需要指定方法抛出的任何异常类型。