问答详情
源自:3-5 使用多线程实现多客户端的通信

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

//关闭资源

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();

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

提问者:啊梨真神奇 2016-02-29 15:28

个回答

  • SoyaDokio
    2016-07-01 02:54:54
    已采纳

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

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

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

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

  • 花黑暗里开放
    2016-05-12 15:47:58

    这样的代码才有健壮性

  • _神人A
    2016-04-23 16:56:10

    这是程序的严谨性

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

  • IT追梦
    2016-02-29 15:52:05

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