当前位置:编程学习 > JAVA >>

关于java中,“避免出现空指针”和“如何快速定位空指针”的讨论

--------------------编程问答-------------------- 这应该是一些编程技巧,没达到一定高度估计没太注意这些问题,小弟我常见的也就这块砖头了。同求同求。
不过我觉的细心的话就可以避免好多。 --------------------编程问答--------------------
引用 1 楼 zclandzzq 的回复:
这应该是一些编程技巧,没达到一定高度估计没太注意这些问题,小弟我常见的也就这块砖头了。同求同求。
不过我觉的细心的话就可以避免好多。
是啊,觉得有些问题不能根治,但是希望把自己的想法分享出来,大家一起讨论学习啊 --------------------编程问答-------------------- 那还不快露一手? --------------------编程问答-------------------- 有时检察输入的String类型变量str是否为合法输入时,使用判断:
if( str!= null && !str.isEmpty() )
而不能写成 if( !str.isEmpty() && str!= null )这样的话程序因为优先执行左边的判断语句,从而导致NullPointerException 的发生. --------------------编程问答--------------------
引用 4 楼 zclandzzq 的回复:
有时检察输入的String类型变量str是否为合法输入时,使用判断:
if( str!= null && !str.isEmpty() )
而不能写成 if( !str.isEmpty() && str!= null )这样的话程序因为优先执行左边的判断语句,从而导致NullPointerException 的发生.
优先执行左边的判断语句,这句话说的好,小弟就曾经遇到这样的问题呢,呵呵 --------------------编程问答-------------------- stracktrace一看马上就定位到了,原因一般也会一目了然,用得着讨论? --------------------编程问答-------------------- nullpointer是最好发现最好处理的java exception之一,可以说 --------------------编程问答--------------------
引用 6 楼 ticmy 的回复:
stracktrace一看马上就定位到了,原因一般也会一目了然,用得着讨论?

我觉得等程序运行后才去发现那就有些晚了,应该是防患于未然,无论什么语言编写程序,程序员应该都应该对编程有的警觉性。java提供空指针异常抛出,但是如果c/c++。出现空指针也许程序崩溃不算什么,但是出现更严重的结果呢?为啥不事先做到尽量减小的损失,保证程序的尽量完美。 --------------------编程问答--------------------
引用 6 楼 ticmy 的回复:
stracktrace一看马上就定位到了,原因一般也会一目了然,用得着讨论?
stracktrace只能定位方法,但是一个方法中如果调用了很多的内容的话,并不能明确的知道是哪一行出的问题的。如果这个异常是不容易重现的话,那这个问题就很难解决了。所有我觉得有讨论的必要。

ps:多谢关注 --------------------编程问答--------------------
引用 9 楼 makeppy 的回复:
引用 6 楼 ticmy 的回复:

stracktrace一看马上就定位到了,原因一般也会一目了然,用得着讨论?
stracktrace只能定位方法,但是一个方法中如果调用了很多的内容的话,并不能明确的知道是哪一行出的问题的。如果这个异常是不容易重现的话,那这个问题就很难解决了。所有我觉得有讨论的必要。

ps:多谢关注

貌似已经可以定位到某一行了吧。 --------------------编程问答--------------------
引用 10 楼 sd4324530 的回复:
引用 9 楼 makeppy 的回复:

引用 6 楼 ticmy 的回复:

stracktrace一看马上就定位到了,原因一般也会一目了然,用得着讨论?
stracktrace只能定位方法,但是一个方法中如果调用了很多的内容的话,并不能明确的知道是哪一行出的问题的。如果这个异常是不容易重现的话,那这个问题就很难解决了。所有我觉得有讨论的必要。

ps:多谢关注

貌似已经可……
有的时候鞥定位到行,有的时候确实不能定位到行呢。。。。。 --------------------编程问答-------------------- 怎么会定位不到哪行? 

其实空指针挺好的啊,有时间就当帮我们测试了。没必要非要通过什么手段去避免。如果没了空指针可能在测试的时候你老找不到数据不对的错误到底是什么回事 --------------------编程问答-------------------- 多用一些3目表达式。例如 var==null?”“:var --------------------编程问答--------------------
引用 13 楼 gywjhing 的回复:
多用一些3目表达式。例如 var==null?”“:var
觉得这个好复杂。。。我几乎不用,,,,, --------------------编程问答-------------------- null object 模式。

DbC

google guava: com.google.common.base.Optional --------------------编程问答-------------------- 空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜! --------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!

这个说得好,至少可以当成必要条件。 --------------------编程问答-------------------- 哪一行报错,点前面就是空指针 --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 小弟?????????? --------------------编程问答-------------------- 好像有空指针的异常类的...抓住 --------------------编程问答-------------------- 快速定位异常代码行,这个是需要能力的,慢慢来  --------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!

+1 --------------------编程问答-------------------- --------------------编程问答-------------------- +2
引用 24 楼 chianfirstli 的回复:
引用 16 楼 bao110908 的回复:

空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!

+1
--------------------编程问答-------------------- 个人觉得这个问题还是要自己在写代码的时候很小心的,前后联想着写,并注意逻辑,应该会减少空指针的发生  --------------------编程问答-------------------- --------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!


同意。 --------------------编程问答--------------------
引用 12 楼 abstruct 的回复:
怎么会定位不到哪行? 

其实空指针挺好的啊,有时间就当帮我们测试了。没必要非要通过什么手段去避免。如果没了空指针可能在测试的时候你老找不到数据不对的错误到底是什么回事



有时候我也是这样认为的~
--------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!


很好的建议 --------------------编程问答--------------------
引用 31 楼 zzz5512536 的回复:
引用 16 楼 bao110908 的回复:

空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!


……
是啊,高手经验之谈啊,学习了啊 --------------------编程问答-------------------- 那个String的非空判断可以用apache的common-lang3中的StringUtils.isBlank()或者是isNotBlank()来判断。 --------------------编程问答-------------------- 应该首先判空啊,或者某些字符串直接用正则就可以过滤了。
判空在客户端和服务端都应该进行。 --------------------编程问答--------------------
引用 33 楼 rickqin 的回复:
那个String的非空判断可以用apache的common-lang3中的StringUtils.isBlank()或者是isNotBlank()来判断。
恩。学习。呵呵 --------------------编程问答--------------------  最常见的NullException是这样产生的:

 myCup.getCoffee().drink(); //getCoffee() returns null --------------------编程问答-------------------- 单步跟踪一下不就完了 --------------------编程问答-------------------- 1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!

但是很麻烦啊 --------------------编程问答-------------------- list.add(1,Factory.add(fstu1,fstu2));返回空指针异常
factory两构造方法如下
public Factory(){}
public Factory(int i){...}

Factory.add()返回一个factory对象,fstu1,fstu2均是factory对象
添加构造方法
public Factory(Factory f){...}运行正常,如何解释

--------------------编程问答-------------------- 好像没有这么写的吧,先声明一个该对象的变量,再用add方法赋值吧 --------------------编程问答-------------------- 如果可能存在空指针就先进行非空判断吧 --------------------编程问答-------------------- --------------------编程问答--------------------   在很多情况下 我不尝试去避免NullPointerException
  因为我通常把NullPointerException当作逻辑错误 出现了就是程序逻辑有问题
  如果吞掉NullPointerException 而不做出任何反应的话 不利于寻找bug --------------------编程问答-------------------- 。。。搞android的表示,每次看见空指针,就会很开心。。。因为空指针是最容易解决的问题。。。或者说根本不是问题 --------------------编程问答--------------------
引用 44 楼 a328240784 的回复:
。。。搞android的表示,每次看见空指针,就会很开心。。。因为空指针是最容易解决的问题。。。或者说根本不是问题
不都是java嘛 --------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!


+10086 --------------------编程问答--------------------

if ("root".equals(userName)) 
{....} 



这样只是不报错吧,该空还得空,怎么避免? --------------------编程问答-------------------- 最开始学习的时候也会碰到空指针的异常,但是现在再来看找到空指针异常的原因其实还是比较简单的,正如lz所说的,大部分的空指针都是因为一些对象没有被初始化,所以在解决空指针异常的时候,多反过来找一找对象就比较容易解决问题了! --------------------编程问答--------------------
引用 16 楼 bao110908 的回复:
空指针异常的出现,基本上不能怪别人,只能怪自己的编码形式有问题。

建议:

1:对于所有 public 方法传入的对象参数进行 null 值检查
2:对于所有从数据库获取的对象进行 null 值检查
3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查

做到以上三点,空指针异常基本上会跟你说拜拜!


+1 --------------------编程问答-------------------- if ("root".equals(userName)) 
{....} 

我觉得这样写还不如
userName != null 然后在&& equals
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,