在第一个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);
}
}
}
}
答案 0 :(得分:1)
我们可以抛出Exception
,前提是我们声明方法抛出相同的Exception
(throws Exception
子句)或处理它(使用try catch
块)。
Exception
是已检查的例外,必须处理
但
RuntimeException
有效,因为它的未经检查的异常,为此我们不需要throws
子句或处理它
答案 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及其子类是特殊类型异常,不需要明确地捕获