这是代码示例,我收到错误“必须被捕获或声明 被抛出“但我有
已经处理了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
}
}
答案 0 :(得分:6)
您遇到的问题是编译器处理变量声明类型,而不是您分配给变量的类型。
变量的类型为Exception
,它不是throws
子句的一部分。
如果您将catch()
子句更改为匹配IOException
,则会进行编译。
答案 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
}
}