try{
conn=ds.getConnection();
stmt=conn.createstatement();
rs=stmt.executeQuery("");
......rs.close();//-----------------1
rs=null;
stmt.close();
stmt=null;
conn.close();
conn=null;//------------------1
}
catch(Exception e){
....}
finally{//--------------------2
if(rs!=null){
try{
rs.close();}
catch(Exception e){...}
rs=null;
 }
if(stmt!=null){
try{
stmt.close();}
catch(Exception e){...}
stmt=null;
 }
if(conn!=null){
try{
conn.close();}
catch(Exception e){...}
conn=null;
 }---------------------------2
}
困惑:
我怎么觉得1处的三个close是多余的,反正finally总是执行的,为什么不单留下finally里的处理。
在1处处理一下的目的是神马?线程安全

解决方案 »

  1.   

    你的意思是说直接赋值null,然后就被自动回收了?
      

  2.   

    如果finally反正都要执行的话,try里头的close完全可以不用啊
      

  3.   

    没,我是说整个
    rs.close();//-----------------1
    rs=null;
    stmt.close();
    stmt=null;
    conn.close();
    conn=null;//------------------1
    部分是多余的因为与finally中重复了但如果说用=null代替close方法,还要研究一下,close方法关闭的资源可能不止它自身对象