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

来源:3-5 使用多线程实现多客户端的通信

啊梨真神奇

2016-02-29 15:28

//关闭资源

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回答

  • 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-07-04 09:12:36

    共 1 条回复 >

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

    这样的代码才有健壮性

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

    这是程序的严谨性

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

    染红_街道

    把它放在try最后也可以啊,如果前面报错,那么后面根本不会执行,何来关闭之说

    2016-07-11 09:29:30

    共 1 条回复 >

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

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

Java Socket应用---通信是这样练成的

分享的是 Java 中的网络编程,使用Socket实现网络聊天通信

125013 学习 · 590 问题

查看课程

相似问题