java:如何最终声明一个在 try - catch 块中初始化的变量?
我有一个变量,在初始化后不应该改变它的值,所以我想把它定义为一个最终的变量。
问题是变量必须在try块内初始化,所以我遇到了以下麻烦:
我有以下代码:
Connection conn = null;
try {
conn = getConn(prefix);
[...do some stuff with conn...]
} catch (Exception e) {
throw new DbHelperException("error opening connection", e);
} finally {
closeConnection(conn);
}
如果我将 variabale 声明为 final,而不将其初始化为 null,则会在 finally 块上得到一个“局部变量 conn 可能尚未初始化”。另一方面,如果我将其声明为 final 并将其初始化为 null,则会在 try 块中收到错误“无法分配最终的局部变量 conn”。
编辑:在lxx答案之后,我带来了这个版本
try {
final Connection conn = conn = getConn(prefix);
try {
return selectAll(conn, sql, params);
} catch (Exception e) {
throw new DbHelperException("error executing query", e);
} finally {
closeConnection(conn);
}
} catch (Exception e) {
throw new DbHelperException("error opening connection", e);
}
所以这应该是这样做的方法吗?
--
经验教训:
我认为这个问题的正确答案是lxx给出的答案,但是在这种情况下,我猜宣布变量最终的缺点超过了它的好处......
--
编辑:在堆栈溢出上发现了两个关于何时使用最终的问题