当前位置: 技术问答>java相关
请问这段程序为什么要这样写?
来源: 互联网 发布时间:2015-11-13
本文导语: 程序中把_s,_is,_os重新赋给一个新的实例,然后再close()?为什么不在_s,_is,_os中直接close()呢?这样两种方式有什么不同吗?请指教了。 public class my { private Socket _s; private InputStream _is; private OutputStream _os; …...
程序中把_s,_is,_os重新赋给一个新的实例,然后再close()?为什么不在_s,_is,_os中直接close()呢?这样两种方式有什么不同吗?请指教了。
public class my
{
private Socket _s;
private InputStream _is;
private OutputStream _os;
…………………………………………
public void close() throws IOException
{
Socket s = _s;
_s = null;
OutputStream os = _os;
_os = null;
InputStream is = _is;
_is = null;
try {
if (os != null)
os.close();
if (is != null)
is.close();
} finally {
if (s != null)
s.close();
}
}
}
public class my
{
private Socket _s;
private InputStream _is;
private OutputStream _os;
…………………………………………
public void close() throws IOException
{
Socket s = _s;
_s = null;
OutputStream os = _os;
_os = null;
InputStream is = _is;
_is = null;
try {
if (os != null)
os.close();
if (is != null)
is.close();
} finally {
if (s != null)
s.close();
}
}
}
|
可能是为了释放资源,设置为null是为了使垃圾手机器收集加速,但有可能stream还没有关闭所以用了try和finally来强制关闭stream。应该是这样。
|
os.close();
is.close();
有可能出错,但是s。close()必须执行,故此要try前面的语句,s.close()放在finally里了。
is.close();
有可能出错,但是s。close()必须执行,故此要try前面的语句,s.close()放在finally里了。
|
这个我觉得要看写程序得人的目的了,我从这里看不出。