java“最终块未正常完成”Eclipse警告
Eclipse在以下代码中向我发出警告:
public int getTicket(int lotteryId, String player) {
try {
c = DriverManager.getConnection("jdbc:mysql://" + this.hostname + ":" + this.port + "/" + this.database, this.user, this.password);
int ticketNumber;
PreparedStatement p = c.prepareStatement(
"SELECT max(num_ticket) " +
"FROM loteria_tickets " +
"WHERE id_loteria = ?"
);
p.setInt(1, lotteryId);
ResultSet rs = p.executeQuery();
if (rs.next()) {
ticketNumber = rs.getInt(1);
} else {
ticketNumber = -1;
}
ticketNumber++;
p = c.prepareStatement(
"INSERT INTO loteria_tickets " +
"VALUES (?,?,?,?)");
p.setInt(1, lotteryId);
p.setInt(2, ticketNumber);
p.setString(3, player);
p.setDate(4, new java.sql.Date((new java.util.Date()).getTime()));
p.executeUpdate();
return ticketNumber;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (c != null) {
try {
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return -1;
}
}
我的代码怎么了
# 1 楼答案
来自
finally
的return
“重写”进一步的异常抛出# 2 楼答案
在
finally
块中使用return
和throw
语句,您将得到警告,例如,您将在以下finally块中得到相同的警告:# 3 楼答案
通常
finally
块永远不应该有返回语句,因为它会覆盖其他return
-语句或Exceptions
更多阅读和更详细的背景答案,请参见问题
Behaviour of return statement in catch and finally
# 4 楼答案
如果没有任何
catch
块,那么finally
块必须直接嵌套在彼此内部。它只捕获一个异常,允许代码在try/catch/finally块结束后继续。如果没有捕捉到异常,那么在finally块之后就不能有任何代码了你可以看到它是如何工作的with this example on Repl.it
示例输出
示例代码位于Repl。它
# 5 楼答案
从中删除return语句。 最后一个区块被视为清理区块,通常不会在其中返回