A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张强1 中级黑马   /  2013-7-25 21:43  /  1873 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜光 于 2013-7-27 14:56 编辑

如果 in == null,就说明 in这个引用所指向的对象还没有被创建,自然 in.close()也就不可能被执行,而且会报异常。我是这样想的,程序中 如果你先声明变量 InputStream(或者其他流类型) in = null;然后执行其他语句,再 in = new 、、、、在in new之前其他语句出exception,这时流没有被打开,也就无需关闭,如果不判断if(null != in) 硬要关闭in就出exception另外你的代码按如下写会更合理: if(null != in){      try{           in.flush();           in.close();           in = null;      }      catch(IOExection e){}; }

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

4 个回复

倒序浏览
你这样写没错,因为finally{}中是关闭资源的,流操作的也是一个资源,可以在关闭之间判断一下也行,如果为空,则说明前面没有实例化流或者是中途出现了异常,则不关闭,如果不为空的话,则关闭,我感觉这样符合正常的思考。!
回复 使用道具 举报
try{           in.flush();           in.close();           in = null;      }    in已经close了,你为什么还 in = null; ?
回复 使用道具 举报
lljwdbklb 来自手机 中级黑马 2013-7-26 15:34:56
板凳
graspDN 发表于 1 小时前
try{           in.flush();           in.close();           in = null;      }    in已经close了,你为什么还 in...

这样做可以让别人清晰知道 这个操作已经结束了来自: iPhone客户端
回复 使用道具 举报
in=null时的意思就是说流还没有被初始化时就报异常了,此时流为空值。对于空值的流是不能关闭的,否则会出空指针异常。所以之前要判断一下。有 相关方法关闭 如:FileOutputStream out = new FileOutputStream
操作完成后  out.close
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马