为什么在已经声明时获得处理或声明错误?

时间:2015-09-22 06:53:09

标签: java exception exception-handling compiler-errors

这是代码示例,我收到错误“必须被捕获或声明 被抛出“但我有

已经处理了IOException。所以你能告诉我为什么错误填充。代码也是

遵循句柄和声明规则。

public void rethrow() throws SQLException, IOException {
    try {
        couldThrowAnException();
    }
    catch(Exception e) {
        e = new IOException();
        throw e;            //Error: must be caught or declare to be thrown
    }
}

3 个答案:

答案 0 :(得分:6)

您遇到的问题是编译器处理变量声明类型,而不是您分配给变量的类型。 变量的类型为Exception,它不是throws子句的一部分。

如果您将catch()子句更改为匹配IOException,则会进行编译。

我建议您阅读the Exceptions TrailJava Language Tutorial

答案 1 :(得分:0)

您处理了IOException,但是您从catch块中抛出Exception(而不是IOException)。 所以你必须在throws子句中添加Exception

在catch块中捕获IOException而不是Exception

答案 2 :(得分:0)

public void rethrow() throws SQLException, IOException {
    try {
        couldThrowAnException();
    }
    catch(IOException e) {
        e = new IOException();
        throw e;            //Error: must be caught or declare to be thrown
    }
}

尽管如此,它对于它而言并没有任何意义并将它扔掉......

更好的方法是:

public void rethrow() {
    try {
        couldThrowAnException();
    }
    catch(IOException e) {
        //do something when you encounter the io-error
    }
    catch(SQLException e) {
        //do something when you encounter the sql-error
    }
}