-3

我有一些代码会引发潜在的错误,我抓住了这些,然后跳到一个finally块中,这里是“伪”形式。

private boolean myMethod(ResultSet rs1, ResultSet rs2){

Vector<String> temp = new Vector<String>();

try{

//add info into temp while condition is true
while(true){temp.add(information);}//potentially throws an SQL error

//test my temo object for some codition
if(false){throw InternalError();}


}catch (SQLException e){
     //send error message
}
catch (InternalError e){
     //send error message
}

finally{
//whatever happens I need to send a result of some sort!

if(temp.size() > 1){
   //create class member variable from this info
}

//send a message explaining that an error has occurred.

//this is the message to say if things have worked or not, so as the
//calling code can handle an re-run this method until this value returns true.
return booleanValue
}//end finally


}//end method

我不确定此错误消息在这种情况下的确切含义。

我通常在任何抛出异常的方法中处理任何异常,在这种情况下我应该抛出而不是处理异常,并在自定义异常中捕获这两个错误吗?

我发送的前两条消息主要用于开发目的,因为我必须处理它们。我的 finally 块中的消息最终将包含给用户的消息,要求他们确认情况、进行修改、中止或更改我们遇到这种情况的方式。

我应该怎么做才能“删除”编译器消息。我不喜欢在我的代码中抑制警告,因为我不喜欢暗示我可能会在链的下游抑制其他东西,而且抑制是针对整个方法的,我不能为此添加它一小段代码。

对我的情况有什么建议。

提前致谢。

编辑 1:为了反映评论,抱歉忘记将正确的返回类型(愚蠢的错误)与 if(test){} 右括号相同。

PS。对于那些“投反对票”的人,您可以发表评论,让我有机会在投反对票之前进行编辑。谢谢。同样在我的代码中,这些东西并没有给我带来问题,这是发布过程中大脑和手指之间的“查询脚本故障”的情况。

4

4 回答 4

7

breakcontinue * return * 和throw是语句的突然完成。你应该在finally块之外返回。此外,您将返回 void 方法。

于 2012-09-10T08:08:49.510 回答
5

如果您已格式化您的代码,您会看到该finally子句位于 a 内catch,并且没有链接到任何try子句。

你应该有

try {

} catch {

} finally {

}

并不是

try {

} catch {
     finally {

    }
}
于 2012-09-10T08:06:33.543 回答
4

方法返回类型是void,并且您return booleanValuefinally block. 我会使用 finally 块来关闭非 java 资源。

如果你想返回值,那么要么在 try 块或 catch 块中返回它,要么try{} catch{}finally{}.

于 2012-09-10T08:06:31.913 回答
4

这是因为您在finally块中有return语句,这是不可取的,并且被认为是一种糟糕的编码风格。

于 2012-09-10T08:09:10.687 回答