Java finally步步完善

原创
2016/04/09 22:03
阅读数 41

Java finally步步完善
------------------------------------------------------------------------------------------

try{
   Socket sock=new Socket("127.0.0.1",9999);
   DataInputStream din=new DataInputStream(sock.getInputStream());
   DataOutputStream dout=new DataOutputStream(sock.getOutputStream());
  //业务代码
  ...
  din.close();
  dout.close();
  sock.close();
}catch(Exception e){
  //异常处理程序
}

上述代码的问题:
忽略了在关闭上述对象时可能产生异常的情况,一旦出现异常将不会执行后面的代码,无用的对象将会占用宝贵的内存。
------------------------------------------------------------------------------------------

Socket sock=null;
DataInputStream din=null;
DataOutputStream dout=null;
try{
   Socket sock=new Socket("127.0.0.1",9999);
   DataInputStream din=new DataInputStream(sock.getInputStream());
   DataOutputStream dout=new DataOutputStream(sock.getOutputStream());
  //业务代码
  ...
  din.close();
  dout.close();
  sock.close();
}catch(Exception e){
  //异常处理程序
}
finally{
  try{
    din.close();
    dout.close();
    sock.close();
  }catch(Exception e){
     //异常处理程序
  }
}

上述代码的问题:
若 din.close();抛出了异常,后面两句就不会执行,这是一种没有做到位的的表现。
--------------------------------------------------------------------------------------------
最后的完善
Socket sock=null;
DataInputStream din=null;
DataOutputStream dout=null;
try{
   Socket sock=new Socket("127.0.0.1",9999);
   DataInputStream din=new DataInputStream(sock.getInputStream());
   DataOutputStream dout=new DataOutputStream(sock.getOutputStream());
  //业务代码
  ...
  din.close();
  dout.close();
  sock.close();
}catch(Exception e){
  //异常处理程序
}
finally{
  try{din.close();}
  catch(Exception e){
     //异常处理程序
  }
  try{dout.close();}
  catch(Exception e){
     //异常处理程序
  }
  try{sock.close();}
  catch(Exception e){
     //异常处理程序
  }       
}

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
1
分享
返回顶部
顶部