-6

在第一个 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);
            }
        }
    }
}
4

2 回答 2

1

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

Exception是一个检查异常,这些必须处理

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

请参阅已检查与未检查的异常

于 2013-09-12T12:31:19.633 回答
-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 及其子类是特殊类型的异常,不需要显式捕获

于 2013-09-12T12:31:45.117 回答