无法抛出异常,为什么?

时间:2013-09-12 12:29:35

标签: java exception-handling

在第一个catch块中为什么我们不能抛出Exception个对象?这里RuntimeException工作正常。

public class CirEx {
    public Circle getCircle(int id) {
        Connection conn = null;
        try {
            Class.forName("");
            conn = DriverManager.getConnection("");
            PreparedStatement pstmt = conn.prepareStatement("");

            Circle circle = new Circle(1, "");
            return circle;
        } catch (Exception e) {
            throw new RuntimeException(e);
            // why we cann't do that.
            // throw new Exception(e);
        } finally {
            try {
                conn.close();
            } catch (SQLException e) {
                System.out.println(e);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我们可以抛出Exception,前提是我们声明方法抛出相同的Exceptionthrows Exception子句)或处理它(使用try catch块)。

Exception已检查的例外,必须处理

RuntimeException有效,因为它的未经检查的异常,为此我们不需要throws子句或处理它

See Checked vs Unchecked Exception

答案 1 :(得分:-2)

因为在这种情况下,您必须声明它抛出异常的方法。

 public Circle getCircle(int id) throws Exception{
Connection conn = null;
try {
    Class.forName("");
    conn = DriverManager.getConnection("");
    PreparedStatement pstmt = conn.prepareStatement("");

    Circle circle = new Circle(1, "");
    return circle;
} catch (Exception e) {
    throw new RuntimeException(e);
    // why we cann't do that.
    // throw new Exception(e);
}

finally {
    try {
        conn.close();
    } catch (SQLException e) {
        System.out.println(e);
    }
}

}

注意:RuntimeException及其子类是特殊类型异常,不需要明确地捕获