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)思维不要被例子里的代码限制了,还有其他许多复杂的情况。
举例说明://不是这种
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)思维不要被例子里的代码限制了,还有其他许多复杂的情况。
是否判断为NULL只有遇到需求的时候才会进行相应的判断,没有需求的判断没什么必要。
个人感觉:自己写一个方法供人家调用,他随便给个参数进来了,自己得先判断一下,不能他给个东西我把自己搞死了,起码得能接受一定的考验,所以就判断一下了。
个人感觉:自己写一个方法供人家调用,他随便给个参数进来了,自己得先判断一下,不能他给个东西我把自己搞死了,起码得能接受一定的考验,所以就判断一下了。当然了,任何程序都得这样,所以你还没说到点上,这里是讨论对Null的判断,既对运行时异常的判断的意义与作用。所以你说的健壮,还是举例说明好。
“如果NULL String以下操作都没有意义了”什么意思。
“如果NULL String以下操作都没有意义了”什么意思。如果是NULL就可以直接跳出来了,后续操作就可以不做了,除非你允许参数为空,这时也需要在if(s == null)中进行处理,再有个建议if(s == null){//请加大括号}
“如果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板块都没几个人讨论,都是凭感觉说话的,凭感觉看下,凭感觉走了。
好吧,我这问题真没技术含量了
//查询数据库
//IO操作
//网络通信
str.trim();//这里抛异常了前面的工作不都白做了,还浪费资源
}
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是十分常见的。
还不如这样写
try{
s.toString();
} catch{}
反正都没异常处理
API这么抛NullpointException只是为了提醒你这里会出异常让你规避
你自己在代码里面这么写不知道是什么心态。
不知道楼主是不是这个意思
有时s可能是从一个你不确定的一个程序传进来的 也就是别人调用了你 但是他传个空值会使程序达不到想要的效果 比如你这个方法是根据传过来的参数获取session 这样null值是没意义的 自然没必要调用get 而是要在get之前拦截 否则你用null得到的值是空 对那个空操作 就会nullpointer 这是你不希望的
还有一种情况就是 s是不是空对程序没有影响 比如你要用这个参数和某些值比较 这样就不需要判断
个人不喜欢判断 而是在javadoc中写好了 别传空进来 这是设计原则 我只保证传入正确的值可以得到正确的结果 你传的值有问题导致结果不对 能怪我吗
最好还是有个好的约定 避免这种情况
//删除目录与文件
if(str.equals(""))
.....
}如果前面不做空判断,等到str.equals("")抛异常,那前面删除的内容可就删了,而后面的程序却还没执行,联想下数据库的事务就知道问题的。
而private方法可以不判断
if(str == null){
str = def;
}
return str;
}
你说反了吧,commit放在finally中,即使异常了 也会提交操作的吧。
应该是rollback放在catch里面吧
你说反了吧,commit放在finally中,即使异常了 也会提交操作的吧。
应该是rollback放在catch里面吧 谢谢!是这样的。
try{
java code..
con.commit();
}catch(Exception e){
con.rollBack();
}finally{
if(con != null){
con.close();
}
}
“如果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("")被坑过后报几回空指针,自然就有记性了。
可能或可以为null的时候仅判断不抛异常.
“如果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();
}
}
我说数据库是打比方的,不要由偏题了。
这不是纠结,这只是对null判断的一点讨论而已。