为什么你可以抛出一个非发生的异常而不是捕获它

Exa*_*oth 5 java exception-handling exception

public void throwTest() throws SQLException, IOException {
    try{  
    } catch (SQLException e) {
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么尝试捕获不会发生的异常会产生编译错误,而我可以抛出任何异常,它不会给出错误?两者都可以在编译时检查,所以如果行为相同,那对我来说会更有意义吗?

在给定的示例中,catch-block将生成编译时错误:error:exception SQLException永远不会在相应的try语句的主体中抛出} catch(SQLException e){

当我删除catch块时,代码编译得很好.这似乎与我不一致.这种行为有什么特别的原因吗?

Joo*_*gen 3

捕获可以在编译时确定。throws 声明实际上不能在当前方法中抛出,但可以在某些子类的重写方法中抛出。它是以子类的形式使用该类的契约:它可能会抛出该异常,并且需要处理该异常。它还允许子类的方法抛出该方法。