看到很多人代码是这样写的,先把 对象=null,然后在new,这个和直接new有什么区别,
比如一个user 表,
特别是在数据库的操作中,一般都是:
 Connection conn = null;  
 PreparedStatement pstmt = null;  
 ResultSet rs = null; 
 conn =DriverManager.getConnection();
 pstmt=conn.prepareStatement("select *from user where username=?");
 pstmt.setString(1, username);
 rs=pstmt.executeQuery();
如果我直接使用
Connection conn =DriverManager.getConnection();
PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
ResultSet rs=pstmt.executeQuery();
有什么区别?是为了更好看吗?还是和虚拟机有关系,请高手多指点。

解决方案 »

  1.   

    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    conn =DriverManager.getConnection();
    pstmt=conn.prepareStatement("select *from user where username=?");
    pstmt.setString(1, username);
    rs=pstmt.executeQuery();
    这样写是为了可以在多个方法中可以调用conn,pstmt,rs。
    Connection conn =DriverManager.getConnection();
    PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
    pstmt.setString(1, username);
    ResultSet rs=pstmt.executeQuery();
    这样写,有局限性
      

  2.   

    至于在性能上,这个并没有什么差别,有时候还是1楼提的吧,局限性问题
    比如你在某个方法一开始的时候定义一个String类型的变量,然后在某个条件判断里进行赋值,但你在条件判断外使用的时候,他就会提示你要初始化,所以一般都会默认为一个null
      

  3.   

    1.变量的定义放到一个统一的地方声明是一个较好的编程习惯
    2.还有一个就是要考虑到变量的作用范围。如:
    try {
       Connection conn =DriverManager.getConnection();
       PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
       pstmt.setString(1, username);
       ResultSet rs=pstmt.executeQuery();
    } carch(...) {
    } finally {  // 如果这样写的话,此处将无法使用下面的语句
      if (conn != null) {
          conn.close();
      }
    }
      

  4.   

    是没有什么区别,但是除了一楼说的,还有一方面,就是如有你把这个类实例化了,那么就要给conn分配地址,这样不好
      

  5.   

    4楼说的正经楼主看到的=null的代码就不正经.数据库操作还不捕获异常,找死.
      

  6.   

    不是为了更好看的,像有个这样的情况:
    static String s=null
     void MthodA(){
        s="abc";
    }
    String MthodB(){
       s="xyz";
    }
    这里分开来的写法就非常有用了,我们可以一目了然的看出两个方法中用的是同一个静态成员变量,
    但是如果在
    MethodA(){
       String s="abc";   //这里的s只能视为局部变量了,而不是成员变量
    }
    这时候再来看
    String MthodB(){
       s="xyz";     //这里的代码就要报错了,因为它在类的全局里并没有定义.
    }
    成员变量跟局部变量主要是用 来分别堆栈区里的分别,要搞清楚原理还必须要了解一下堆栈区
    祝你好运.
      

  7.   

    就是四楼说的,为了避免出现作用范围的问题,一般提倡先用null来初始化,到了要用的时候才去实例化
      

  8.   

    这个支持,补充一下
    Connection conn = null;
    方便初始化,方便后面调用,可以重复使用,可以设为全局变量
    简单的说就是你给Connection 起了一个名字