Java变量是否是必需的
当我学习编程语言时,老师说我必须初始化,否则空指针会犯很大的错误。当我建立JDBC连接数据库时,Intelij IDEA建议当ResultSet变量的定义初始化为null时,初始化是多余的。为什么其他人没有出现?有时把一句话分成两句也是明智的。初始化、分配Java变量是否是必需的,java,Java,当我学习编程语言时,老师说我必须初始化,否则空指针会犯很大的错误。当我建立JDBC连接数据库时,Intelij IDEA建议当ResultSet变量的定义初始化为null时,初始化是多余的。为什么其他人没有出现?有时把一句话分成两句也是明智的。初始化、分配 public List<Message> getMesssages() { Connection conn = null; Statement statement = null; ResultSet re
public List<Message> getMesssages()
{
Connection conn = null;
Statement statement = null;
ResultSet result = null;
SQLException ex = null;
List<Message> messages = null;
try
{
conn = DriverManager.getConnection(jdbcUrl, username, password);
statement = conn.createStatement();
result = statement.executeQuery("SELECT * FROM departments");
messages = new ArrayList<Message>();
while (result.next()){
Message message = new Message();
message.setDept_no(result.getString("dept_no"));
message.setDept_name(result.getString("dept_name"));
messages.add(message);
}
} catch (SQLException e) {
ex = e;
} finally {
if (statement != null){
try {
statement.close();
} catch (SQLException e) {
if (ex == null){
ex = e;
}
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
if (ex == null){
ex = e;
}
}
}
if (ex != null){
throw new RuntimeException(ex);
}
}
return messages;
}
我看了他的建议,但还是不明白
IDE告诉您,ResultSet结果不能取消初始化并在代码中使用。但其他变量在某些情况下无法初始化,因此必须将默认值设置为null
另外,让我提供另一种代码方法。我认为这可能更具可读性,并且不会出现自动关闭资源的问题:
public List<Message> getMesssages() throws SQLException {
try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password);
Statement statement = conn.createStatement()) {
ResultSet result = statement.executeQuery("SELECT * FROM departments");
List<Message> messages = new ArrayList<>();
while (result.next()) {
Message message = new Message();
message.setDept_no(result.getString("dept_no"));
message.setDept_name(result.getString("dept_name"));
messages.add(message);
}
return messages;
}
}
这里的问题是什么?您应该在这里增加更多的清晰度。结果的初始化是多余的,因为您在已经使用它的唯一块中初始化它。现在编写代码的方式是无法取消初始化的,您甚至可以将声明本身移动到try块中