为了账号安全,请及时绑定邮箱和手机立即绑定

对教程的程序有一个不解之处

//关闭资源

try {

if(pw!=null)

  pw.close();

if(os!=null)

  os.close();

if(is!=null) 

  is.close();

if(isr!=null)

  isr.close();

if(br!=null)

  br.close();

为何要加一个判断条件?是在想不通!

正在回答

4 回答

这是一种正确、严谨的写法。

验证非NULL是编码中很重要的一环。假如本来就是NULL,这是调用各自的close()方法是会报错的。

如果在实例化这些对象时出错导致这些对象为NULL,或是实例化没问题但中途出了什么异常导致这些对象为NULL,都会在未经验证非NULL前尝试调用close()方法关闭时报错。

p.s. 讲师写socket关闭条件时写的是if(socket!=null)socket.close();这样写没错,但我想说一般是另一种写法if(!socket.isClosed())socket.close();

0 回复 有任何疑惑可以回复我~
#1

啊梨真神奇 提问者

受教了,谢谢!
2016-07-04 回复 有任何疑惑可以回复我~

这样的代码才有健壮性

0 回复 有任何疑惑可以回复我~

这是程序的严谨性

是在finally中执行的,就是说这段代码肯定执行。如果这些流在new的时候出错了,那调用close方法会抛出nullpoint exception。

0 回复 有任何疑惑可以回复我~
#1

染红_街道

把它放在try最后也可以啊,如果前面报错,那么后面根本不会执行,何来关闭之说
2016-07-11 回复 有任何疑惑可以回复我~

非空验证,如果当pw、os、is等为空的时候close会报异常

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

对教程的程序有一个不解之处

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信