RT,大家说说写方法时是否判断参数为NULL的情况(这里指自己对NULL不处理,也是抛出异常的情况,而不是指处理掉参数NULL的情况),你为什么要判断,。
举例说明://不是这种
public static String getString(String s){
    return s == null ? "" : s;
}//是这种
public static String getString(String s){
    if(s == null)
        throw new NullpointException.....
    return s.toString();
    ....
}//以上代码只是举例说明(别一看就认为不需要用throw,因为toString()的时候必然会抛出NullpointException)思维不要被例子里的代码限制了,还有其他许多复杂的情况。

解决方案 »

  1.   

    这是想说明什么么?
    是否判断为NULL只有遇到需求的时候才会进行相应的判断,没有需求的判断没什么必要。
      

  2.   

    何为健壮?跟null有关的哪种情况能增加健壮?
      

  3.   

    何为健壮?跟null有关的哪种情况能增加健壮?
    个人感觉:自己写一个方法供人家调用,他随便给个参数进来了,自己得先判断一下,不能他给个东西我把自己搞死了,起码得能接受一定的考验,所以就判断一下了。
      

  4.   

    何为健壮?跟null有关的哪种情况能增加健壮?
    个人感觉:自己写一个方法供人家调用,他随便给个参数进来了,自己得先判断一下,不能他给个东西我把自己搞死了,起码得能接受一定的考验,所以就判断一下了。当然了,任何程序都得这样,所以你还没说到点上,这里是讨论对Null的判断,既对运行时异常的判断的意义与作用。所以你说的健壮,还是举例说明好。
      

  5.   

    NULL感觉必须判断,如果NULL String以下操作都没有意义了,如果后面的操作有操作数据库、读写文件等其它复杂操作还会浪费资源(占内存或数据库连接)。有异常应该在第一时间跳出并施放相关资源。
      

  6.   


    “如果NULL String以下操作都没有意义了”什么意思。
      

  7.   


    “如果NULL String以下操作都没有意义了”什么意思。如果是NULL就可以直接跳出来了,后续操作就可以不做了,除非你允许参数为空,这时也需要在if(s == null)中进行处理,再有个建议if(s == null){//请加大括号}
      

  8.   


    “如果NULL String以下操作都没有意义了”什么意思。如果是NULL就可以直接跳出来了,后续操作就可以不做了,除非你允许参数为空,这时也需要在if(s == null)中进行处理,再有个建议if(s == null){//请加大括号}
    只要是NULL,你判断不判断,后续都会跳出来的,如:public static String getString(String s){
        if(s == null)
            throw new NullpointException.....  //判断在这里抛
        return s.toString(); //不判断,jvm替你这里抛
    }所以这样的判断是没有意义的。整个SE板块都没几个人讨论,都是凭感觉说话的,凭感觉看下,凭感觉走了。
    好吧,我这问题真没技术含量了
      

  9.   

    判断为null,是为了程序的健壮性。如果这是对外开放的API,别人使用的时候传递的是null, 可能会引起程序的崩溃。
      

  10.   

    public void doSomthing(String str){


    //查询数据库
    //IO操作
    //网络通信

    str.trim();//这里抛异常了前面的工作不都白做了,还浪费资源
    }
      

  11.   

    我总感觉 null 是个潜在隐患
      

  12.   

    NullPointerException通常是由JVM丢出,你这里应该丢的是IllegalArgumentException,再加上自己的解释。如果丢了NPE,那就跟没写效果一样
      

  13.   

     public FileOutputStream(FileDescriptor fdObj) {
    SecurityManager security = System.getSecurityManager();
    if (fdObj == null) {
        throw new NullPointerException();
    }
    if (security != null) {
        security.checkWrite(fdObj);
    }
    fd = fdObj;        /*
             * FileDescriptor is being shared by streams.
             * Ensure that it's GC'ed only when all the streams/channels are done
             * using it.
             */
            fd.incrementAndGetUseCount();
        }API里抛出NPE是十分常见的。
      

  14.   

    你写这个throw new NullpointException有意义么
    还不如这样写
    try{
       s.toString(); 
    } catch{}
    反正都没异常处理
    API这么抛NullpointException只是为了提醒你这里会出异常让你规避
    你自己在代码里面这么写不知道是什么心态。
      

  15.   

    public函数不检查参数,熊孩子什么都敢往里传的
      

  16.   

    不是十分理解,楼主不是想抛空指针吧,举个例子,当传入的为Null的时候,抛出一个TermException(),给鬼子做项目的时候要有这个null判断,抛出一个他们想要的异常和异常号
    不知道楼主是不是这个意思
      

  17.   

    分情况  要看具体业务
    有时s可能是从一个你不确定的一个程序传进来的 也就是别人调用了你  但是他传个空值会使程序达不到想要的效果  比如你这个方法是根据传过来的参数获取session  这样null值是没意义的  自然没必要调用get  而是要在get之前拦截  否则你用null得到的值是空  对那个空操作  就会nullpointer  这是你不希望的
    还有一种情况就是  s是不是空对程序没有影响  比如你要用这个参数和某些值比较  这样就不需要判断
    个人不喜欢判断  而是在javadoc中写好了  别传空进来  这是设计原则  我只保证传入正确的值可以得到正确的结果  你传的值有问题导致结果不对  能怪我吗
    最好还是有个好的约定  避免这种情况
      

  18.   

    #16楼我的回复,这就是我的一个意思。说清楚点:public void test(String str){
         //删除目录与文件
         if(str.equals(""))
            .....
    }如果前面不做空判断,等到str.equals("")抛异常,那前面删除的内容可就删了,而后面的程序却还没执行,联想下数据库的事务就知道问题的。
      

  19.   

    楼主可以这样,对数据库操作的话,你可以把commit,放在finally里面做,这样即使是抛出异常,也不会对数据库进行损坏。还有楼主可以"".equals(str)来避免空指针
      

  20.   

    就我的理解,判断应该交给接收参数的那一方。接受方来判断是否位null
      

  21.   

    一般来讲, public方法是应该判断参数是否为null的
    而private方法可以不判断
      

  22.   

    最好判断。我都是过获取值时进行默认替换,如果是null就更改为默认值。String null2Str(String str, String def){
        if(str == null){
            str = def;
        }
        return str;
    }
      

  23.   

    在这里做null值判断然后抛出异常可以理解为,当值为null值使用自己的自定义异常,反馈给用户。比起直接抛null直观的多。
      

  24.   


    你说反了吧,commit放在finally中,即使异常了 也会提交操作的吧。
    应该是rollback放在catch里面吧
      

  25.   


    你说反了吧,commit放在finally中,即使异常了 也会提交操作的吧。
    应该是rollback放在catch里面吧 谢谢!是这样的。
    try{
    java code..
      con.commit();
    }catch(Exception e){
      con.rollBack();
    }finally{
      if(con != null){
         con.close();
      }
    }
      

  26.   

    对一个方法test(String str)而言,不管方法体里面做什么操作,方法本身是不应该关注str是否为null的(这就是为什么空指针异常是运行时异常)。如果str为null时产生一些不可逆的后果,开发人员应该努力保证调用test方法时str总不为Null,而不是在test里面判断再做相应处理。当然我并不是在说你的代码不能这样写
      

  27.   

    没必要纠结是不是null,往后看吧,还有集合框架、正则、I/O在等着你。
      

  28.   


    “如果NULL String以下操作都没有意义了”什么意思。如果是NULL就可以直接跳出来了,后续操作就可以不做了,除非你允许参数为空,这时也需要在if(s == null)中进行处理,再有个建议if(s == null){//请加大括号}
    只要是NULL,你判断不判断,后续都会跳出来的,如:public static String getString(String s){
        if(s == null)
            throw new NullpointException.....  //判断在这里抛
        return s.toString(); //不判断,jvm替你这里抛
    }所以这样的判断是没有意义的。整个SE板块都没几个人讨论,都是凭感觉说话的,凭感觉看下,凭感觉走了。
    好吧,我这问题真没技术含量了除非是出bug了才能说直说这地方错了,像这种个人书写习惯问题,公说公有理婆说婆有理的没有什么意义,像"".equals(str) 这种,写几回str.equals("")被坑过后报几回空指针,自然就有记性了。
      

  29.   

    流程处理中特定的值不准为null的时抛异常.
    可能或可以为null的时候仅判断不抛异常.
      

  30.   


    “如果NULL String以下操作都没有意义了”什么意思。如果是NULL就可以直接跳出来了,后续操作就可以不做了,除非你允许参数为空,这时也需要在if(s == null)中进行处理,再有个建议if(s == null){//请加大括号}
    只要是NULL,你判断不判断,后续都会跳出来的,如:public static String getString(String s){
        if(s == null)
            throw new NullpointException.....  //判断在这里抛
        return s.toString(); //不判断,jvm替你这里抛
    }所以这样的判断是没有意义的。整个SE板块都没几个人讨论,都是凭感觉说话的,凭感觉看下,凭感觉走了。
    好吧,我这问题真没技术含量了除非是出bug了才能说直说这地方错了,像这种个人书写习惯问题,公说公有理婆说婆有理的没有什么意义,像"".equals(str) 这种,写几回str.equals("")被坑过后报几回空指针,自然就有记性了。
    str.equals("")被坑过后报几回空指针没有什么坑不坑的问题,你业务逻辑要求str不能为null,结果报null,这是对的,说明你的意图与代码不匹配,如果不要求str一定不为null,那这样些才会出现不必要的麻烦。你说反了吧,commit放在finally中,即使异常了 也会提交操作的吧。
    应该是rollback放在catch里面吧 谢谢!是这样的。
    try{
    java code..
      con.commit();
    }catch(Exception e){
      con.rollBack();
    }finally{
      if(con != null){
         con.close();
      }
    }
    我说数据库是打比方的,不要由偏题了。
      

  31.   

    都用过了,集合写过自己的实现,正则搜索用过,IO更是用的最多的,开始入门的时候跟IO打交道的应该是热点,各种读取写入文件,利用socket偷偷传输文件,内容分解合并,内容搜索等,NIO就没认真去弄过,就写了点熟悉下API。
    这不是纠结,这只是对null判断的一点讨论而已。
      

  32.   

    没必要这么纽结了,你的代码中的业务功能如果支持NULL就不用判断了