`
angel_167811
  • 浏览: 8150 次
  • 性别: Icon_minigender_2
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

空指针异常的相关问题:

阅读更多

   1:NullPointerException由RuntimeException派生出来,是一个运行级别的异常。意思是说可能会在运行的时候才会被抛出,而且需要看这样的运行级别异常是否会导致你的业务逻辑中断。

  2:空指针异常发生在对象为空,但是引用这个对象的方法。例如: String s = null; //对象s为空(null) int length = s.length();//发生空指针异常  

 3:一个变量是null,及只有其名,没有实值内容,也没分配内存,当你要去取他的长度,对他进行操作就会出现NullPointException,所以生命一个变量时最好给它分配好内存空间,给予赋值。  

  4:比如变量为空,而你没有去判断,就直接使用,就会出现NullPointException。写程序时严谨些,尽量避免了,例如在拿该变量与一个值比较时,要么先做好该异常的处理如: if (str == null) {   System.out.println("字符为空!"); } 当然也可以将这个值写在前面进行比较的,例如,判断一个String的实例s是否等于“a”,不要写成s.equals("a"),这样写容易抛出NullPointerException,而写成"a".equals(s)就可以避免这个问题。不过对变量先进行判空后再进行操作比较好  

 5:尽量避免返回null,方法的返回值不要定义成为一般的类型,而是用数组。这样如果想要返回null的时候,就返回一个没有元素的数组。就能避免许多不必要的NullPointerException,使用NullObject返回代替返回null确是一种不错的选择。  

  6:NullPointerException这个东西换一个角度来看,没准是好处也不一定。可以说,NullPointerException本身也是JAVA安全机制的一部分。有UNIX写C和C++的经验的可能都知道,空指针会导致什么问题:经常会导致程序的崩溃。 :) 而JAVA在这点进行了改善,JAVA为了保证程序的强壮,总是会对对象的引用进行检查。所以不再出险C/C++中的空指针错误,而仅仅是一个运行级别的异常-“NullPointerException”。从这点上说,算是JAVA的一个好处吧。   Josha Bloch倒是在《Effective Java》中说过返回数组的函数,如果没有返回值,优先返回零长度数组而不是返回null。 :) 不过使用NullObject返回代替返回null确是一种不错的选择。返回数组的方法同样可以返回null,因为数组在JAVA中已经发展为完备的对象了。如果是这样,INVOKER也是不可避免地检查NullPointerException。   初值不是你想决定是什么就是什么的。在很多情况下,你甚至无法断定对象的初值是什么才合适。所以这样的习惯并不见得就是很好的习惯。比如说你认为: String str = ""; 这样比较合理,但是为什么不是String str = "A"; 呢?在某些场合并不见得""就是合理的初值。关键还是在建立publish方法的契约之上。如果你使用第三方的方法,你需要阅读其JAVADOC,知道其是否会返回null对象?是否会抛出checkedException,是否会抛出运行级别异常。如果是你自己publish方法,那么你需要在你的JAVADOC中说明你的方法的契约:满足什么条件才能调用此方法,调用之后会产生什么返回?是否会返回/何时返回null?是否抛出异常。在实现publish方法的时候,对于入口参数的检查也是非常关键的,因为调用者的行为是你无法期望的。   其实异常的处理是一个很有意思的话题,不仅仅只是NullPointerException。比如在DBC中有这么一个例子:你需要打开一个文件读,可能是C:\Data.txt,文件却没有找到,叫不叫异常?你如果需要打开另外一个文件,比如是C:\boot.ini,文件也没有找到,叫不叫异常?第一种情况不叫“异常”,因为C:\Data.txt没有找到应该是你能预计到的情况,那个文件可能存在,也可能不存在,这是需要你自己处理的。而第二种情况确叫做异常,因为正常情况下,C:\boot.ini应该被期望存在的,如果运行时丢失了这个文件,就是运行级别异常。在JDK中也有相应的例子,比如FileInputStream, BufferReader, StringTokenizer处理到达尾部的情况就是不一样的。     <<4.为什么说ResultSet作为处理结果不恰当呢?>> 把不相关的东西耦合在了一起。把JDBC query的结果集逻辑和自己需要的数据聚集的逻辑耦合在了一起。这样连抽象都无法做。现在俺们是从数据库中随机取结果,所以你使用了ResultSet,假设需求变化了,需要从文本文件源中取结果了,你的ResultSet接口成了什么?所以说更好的做法是抽象出数据获取的接口,而针对接口不同实现即可。 :) “单一职责”这点很关键,不需要耦合在一起的东西就不要耦合在一起。  

   7:我在写程序时,String uri=getSavePath()+getUploadFileName(); System.out.println(uri+"123345");//这里可以输出结果的 String linkname=getUploadFileName(); String update="update UserTable set uri='?',linkname='?',linkid='?'where username="+"'"+username+"'";        DataBaseOperate dbo=new DataBaseOperate();     PreparedStatement ps=dbo.getConnection1().prepareStatement(update); ps.setString(1, uri);       //这一行居然报出空指针异常呢? ps.setString(2, linkname);             ps.setInt(3, i++);    ps.executeUpdate(); 原来是加?号是为了可以自动给变量给值‘?’ 变成了字符常量了    

分享到:
评论
2 楼 yulanlian 2012-06-21  
,我用用ssh2框架时,acrion调用service里面的save()方法时,出现空指针异常,百思不得其解啊!
1 楼 yue198710ss 2011-08-09  

相关推荐

    利用Java8 Optional如何避免空指针异常详解

    Optional可以让你的代码具有可读性,且会避免出现空指针异常。下面这篇文章主要给大家介绍了关于利用Java8 Optional如何避免空指针异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

    JCTP(CTP JAVA接口) 0.3.2

    修正:交易API部分函数出现空指针异常的问题 修正:行情API部分函数出现空指针异常的问题 变更:发布包中增加JCTP.jar *********************************************** JCTP 0.3.1 2013-2-26 修正:交易API部分...

    在Java8中如何风骚走位的避开空指针异常

    主要给大家介绍了关于在Java8中如何风骚走位的避开空指针异常的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    SubSonic3.0.0.4.1源码包,已修复了一些Bug

    1、Structs.tt模版生成时,没有给PropertyName属性赋值引起的空指针异常(System.NullReferenceException异常) 2、使用SubSonic.Query.Select和SubSonic.Query.SqlQuery查询时,设置了Top属性后,产生的“未处理...

    JAVA几个常见错误简析

    使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long)...由此可见,空指针异常主要跟与对象的操作相关。

    《你必须知道的495个C语言问题》

    5.16 考虑到有关空指针的所有这些困惑,要求它们的内部表示都必须为0不是更简单吗? 60 5.17 说真的,真有机器用非零空指针吗,或者不同类型用不同的表示? 61 地址0 上到底有什么? 61 5.18 运行时的整数值0...

    你必须知道的495个C语言问题

    5.16 考虑到有关空指针的所有这些困惑,要求它们的内部表示都必须为0不是更简单吗? 5.17 说真的,真有机器用非零空指针吗,或者不同类型用不同的表示? 地址0上到底有什么? 5.18 运行时的整数值0转换为指针...

    如何正确地删除目录树中的节点

    本文适用于做java swing及apache ...如何正确地删除树中的结点,以避免在删除结点后程序抛出空指针异常;在删除树结点后,如何按需要求让程序自动选中其它的树结点;在删除树结点的过程中如何正确地处理相关的业务要求

    C语言FAQ 常见问题列表

    o 6.13 考虑到有关空指针的所有这些困惑, 难道把要求它们内部表达都必须为 0 不是更简单吗? o 6.14 说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达? o 6.15 运行时的 ``空指针赋值" 错误是什么意思...

    C++大学教程,一本适合初学者的入门教材(part1)

    2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...

    C++大学教程,一本适合初学者的入门教材(part2)

    2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 ...

    neon-lang:一种简单的编程语言的实现

    设计中可以避免的一些常见错误是: 由于二进制浮点导致的浮点错误当打算if (x == 0)时写入if (x = 0) 空指针异常while (condition);意外空循环while (condition); 忘记使用函数的返回值这些错误已通过多年参加并...

    你必须知道的495个C语言问题(PDF)

    5.8 但是如果NULL 的值改变了, 比如在使用非零内部空指针的机器 上, 难道用NULL (而不是0) 不是更好吗? . . . . . . . . . . . . . 24 5.9 用预定义宏#define Nullptr(type) (type *)0 帮助创建正确类型的 空指针。...

    剑指Offer #14 链表中倒数第k个结点(快慢指针) | 图文详解

    这是一道和链表相关的题,对于这种题目,在熟悉链表的基本操作解决基本问题之余,也一定要记得处理空指针之类的有可能造成程序异常终止的情况,不要贪图方便(尤其是那些前竞赛选手 )。 方法一: 这是一种最常规的...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    7、修复了查看短消息空指针异常及关键字搜索短消息无效 8、修复了生存缓存文件截取修改时间异常 9、修复了禁止浏览器缓冲功能 10、修复了生成验证码的访问路径 11、修复了主题操作在某些条件下会出错 12、修复...

    Java Bug模式详解

    8.1 空指针异常不提供任何信息 8.2 难以捉摸的空指针 第9章 Dangling Composite模式 9.1 Dangling Comp osite bug模式简述 9.1.1 症状 9.1.2 起因 9.1.3 解决方法和预防 措施 9.2 小结 第10章 Null Flag...

    aybook.cn_c++jiaocheng0105.rar

    6.6 指针比较的示例 6.7 指针数组 6.8 空指针约定 6.9 多重间接 6.10 指针带来的问题第7章 函数,第一部分;基础知识 7.1 函数的作用域准则 7.2 传递指针和数组 7.3 argc和argv:函数main()的参数 7.4 return语句 7.5...

Global site tag (gtag.js) - Google Analytics