是否有必要使用Java变量?

时间:2017-10-15 21:21:48

标签: java

  • 当我学习编程语言时,老师说我必须初始化,否则空指针会出错。当我设置JDBC连接数据库时,Intelij IDEA给出建议在ResultSet变量的定义初始化为null时初始化是多余的。为什么没有其他出现?有时建议将一个陈述分成两个句子。初始化,分配。

    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;
    }
    
  • 我看了他的建议,但仍然不明白

1 个答案:

答案 0 :(得分:2)

IDE告诉您,ResultSet result无法在您的代码中未初始化并使用。但是在某些情况下可能无法初始化其他变量,因此您必须将默认值设置为null

P.S。让我提供此代码的另一种方法。我认为这可能更具可读性,并且没有自动关闭资源的问题:

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;
    }
}