Eclipse中的死代码警告 - 这是Eclipse中的一个错误吗?还是我忽略了明显的东西?

d-b*_*d-b 0 java eclipse dead-code compiler-warnings suppress-warnings

使用这个(简化的)代码示例Eclipse(Kepler SR2)为最内层的if语句(if (con != null)),死代码发出警告.

public class DbManager {
    public String getSingleString(String query) throws SQLException {
        DbManager dbmgr = new DbManager();
        Connection con = null;
        try {
            con = dbmgr.getConnection("user", "pwd", URL);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
            if (con != null) {
                PreparedStatement pstmt = null;
                ResultSet rset = null;
                pstmt = con.prepareStatement(query.toString());
                rset = pstmt.executeQuery();
            if (rset != null && rset.next()) {
                return (rset.getString(1));
            }
        }
    }
return null;
}
Run Code Online (Sandbox Code Playgroud)

通常,在try之后在行上定义的数据库连接将创建连接,然后违规的if语句将为true.有关死代码的警告是否真的正确?

ovd*_*srn 12

如果dbmgr.getConnection("user", "pwd", URL);返回异常,则con永远不会为其分配非空引用.

你初始化con为null.因此,当抛出异常并且您的代码将到达catch时,con将为null.这就是检查(con != null)没有意义的原因.