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){
//异常处理程序
}
}