在Java中对值为null的指针调用任何方法,就会引起空指针异常(java.lang.NullPointerException)。空指针异常绝对 是Java中最难查找和调试的一种异常,你永远没法获得任何有用的调试信息。经过我的平常总结和网上搜集整理,概括以下,供你们参考。空指针异常产生的主 要缘由以下:因此在Java中通常报空指针异常的缘由有如下几种:
1字符串变量未初始化;
2接口类型的对象没有用具体的类初始化,好比:
List lt;会报错
List lt = new ArrayList();则不会报错了
3当一个对象的值为空时,你没有判断为空的状况。你能够试着把下面的代码前加一行代码:
if(rb!=null && rb!="")
改为:
if(rb==null);
if(rb!==null&&rb!="") 或者if((“”).equals(rb))
空指针的解决办法:
重点关注报错发生的所在行,经过空指针异常产生的两条主要缘由诊断具体的错误。同时为了不空指针的发生,最好在作判断处理时将“null”或者空值放于 设定的值以前。
常见空指针异常的简要分析:
(1)空指针错误
Java中的8种基本数据类型,变量的值能够有其默认值,加入没有对其正常赋值,java虚拟机是不能
正确编译经过的,所以使用基本的Java数据类型通常不会是不会引发空指针异常的。实际开发中,大多数的空指针异常主要与对象的操做相关。
下面列出可能发生空指针异常的几种状况及相应解决方案:
代码段1:
out.println(request.getParameter("username"));
分析:代码段1的功能十分简单,就是输出用户输入"username"的值。
说明:看上去,上面的语句找不出什么语法错误,并且在大多数状况下也遇不到什么问题。可是,若是某个用户在输入数据时并无提供表单 域"username" 的值,或经过某种途径绕过表单直接输入时,此request.getParameter("username")的值为空(注意不是空字符串,是空对象 null。),out对象的println方法是没法直接对空对象操做的,所以代码段1所在的JSP页面将会抛出 "Java.lang.NullPointerException"异常。并且即便对象可能为空时,也调用Java.lang.Object或 Object对象自己的一些方法如toString(), equal(Object obj)等操做。
代码段2:
String userName = request.getParameter("username");
If (userName.equals("root"))
{....}
分析:代码段2的功能是检测用户提供的用户名,若是是用户名称为"root"的用户时,就执行一些特别的操 做。
说明:在代码段2中,若是有用户没有提供表单域"username"的值时,字符串对象userName为null值,不可以将一个null的对象与另外一 个对象直接比较,一样,代码段2所在的JSP页面就会抛空指针错误。
一个小技巧:若是要把某个方法的返回值与常量作比较,把常量放在前面,能够避免调用null对象的equals方法。譬如:
If ("root".equals(userName))
{....}
即便userName对象返回了null对象,这里也不会有空指针异常,能够照常运转。
代码段3:
String userName = session.getAttribute("session.username").toString();
分析:代码段3的功能是将session中session.username的值取出,并将该值赋给字符串对象userName。
说明:在通常状况下,若是在用户已经进行某个会话,则不会出现什么问题;可是,若是此时应用服务器从新启动,而用户尚未从新登陆,(也多是用户关闭浏 览器,可是仍打开原来的页面。)那么,此时该session的值就会失效,同时致使session中的session.username的值为空。对一个 为 null的对象的直接执行toString()操做,就会致使系统抛出空指针异常。
代码段4:
public static void main(String args[]){
Person p=null;
p.setName("张三");
System.out.println(p.getName());
}
分析:声明一个Person对象,并打印出该对象的中的Name名字。
说明:这个时候你的p就出现空指针异常,由于你只是声明了这个Person类型的对象并无建立对象,因此它的堆里面没有地址引用,切忌你要用对 象掉用方法的时候必定要建立对象。 java