nullpointerxception——处理思路

概念:

1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。
2.所谓的空指针,就是指针的内容为空。比如上面的s,如果令它指向null,就是空指针。
3.所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常。

在Java中对值为null的指针调用任何方法,就会引发空指针异常(java.lang.NullPointerException)。空指针异常绝对是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类型的对象并没有创建对象,所以它的堆里面没有地址引用,切忌你要用对象调用方法的时候一定要创建对象。

时间: 2024-12-14 14:10:41

nullpointerxception——处理思路的相关文章

linux开机获取不到IP排查思路

最近发现linux主机重启老是获取不到IP,每次都要手动dhclient eth0一下,很麻烦. 想了下,可能有问题 于是乎,就有这个排查思路: 1.查看开机时是否将网卡连接上来: 2.在虚拟机内使用命令查看,是否开机启动network服务,主要看3,5两个级别,最好开启: 3. 另外还需要看下网卡配置文件,是否配置正确,主要看 ONBOOT:开机启动网卡.这一项要是yes BOOTPROTO:网络分配方式,静态,这里需要小写,例如dhcp(dhcp自动获取),static(以静态IP方式存在)

《好好说话》:常见沟通场景的应对误区与应答思路、应答句式。4星。

全书针对谈话的常见场景,分析双方的本质问题和应答方的常见应对误区.应该的应答思路与句式.对沟通双方的思路的分析比较有功力. 感觉是从大专辩论赛的角度来组织全书的结构的.我更同意马东在序言中的说法,这本书更应该叫<好好思考>.不过如果从“好好思考”的角度来写书,全书的结构和重点要做一些变化. 书中把语言沟通的五种常见场景(沟通.说服.谈判.演讲.辩论)称作五个维度,还画了一个五边形,我认为这是全书最大的败笔,这里说“五种场景”比“五个维度”跟合适,用表格比用五边形更合适. 个人感觉:在大部分的场

Nginx+PHP (Fastcgi)常见502和504解决思路分享

公司一台测试服务器,最近出现504和502问题:(环境LNMP,php编译安装,Fastcgi模式),问题不难解决,但这里分享一下自己的排查思路和处理问题的方式. 504 Gateway Time-out,nginx 502 bad gateway 一.分析问题: Nginx 504 Gateway Time-out的含义是没有请求到可以执行的PHP-CGI. Nginx 502 Bad Gateway的含义是请求的PHP-CGI已经执行,但是由于读取资源的等没有执行完毕而导致PHP-CGI进程

大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 责任链模式概念和例子 使用的条件 和状态模式的比较分析 责任链的优缺点 纯的责任链和不纯的责任链 javax.servlet.Filter#doFilter()方法源码分析 基于AOP思想,模拟一个拦截器 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂业务逻辑判断的,那么他们有什么不同呢?回忆状态模式——状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象

五子棋计算思路

五子棋分为有禁手和无禁手,有禁手就是在无禁手的规则的基础上加上禁手规则,具体是规则不讲了.所以就人机对战来讲,从无禁手来做,比较好做.这里只讲无禁手的情况.无禁手就是只要能连成5个子,或者5个子以上,就算赢.    而计算机博弈要解决的问题,抽象地讲只有一个问题“下一步怎么走”,对五子棋来讲,就是下一步在哪个点落子.一般的思路在 棋类人机对战的一般原理 - BillySir - 博客园  已经有说.下面重点讲五子棋特有的算法思路. 下一步怎么走,总体思路:    1.如果下一步能赢,就走这一步 

Web 开发后端缓存思路

数据写入缓存: 在数据库与服务端之间利用 redis 这是一个很常见的场景.比如文章的浏览数,每次文章被浏览时,浏览数都 +1.如果每次都回写数据库,不免数据量太大.加上数据库看似简单,其实做了不少关于一致性(请看官了解一下所谓[一致性],[base],[acid])的检查. 而同时,浏览数并不要求保证一致性,只要大概准确就行了. 所以这时候,我们可以先将浏览数写入 redis,满足一定条件后,再回写数据库. 比如,在 controller 中,让每次浏览都在 redis 上 +1,+1 完成后

使用RNN解决NLP中序列标注问题的通用优化思路

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一.在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵.CRF等模型,尤其是CRF,基本是最主流的方法.随着深度学习的不断探索和发展,很可能RNN模型会取代CRF的传统霸主地位,会成为解决序列标注问题的标配解决方案. 本文主要抽象出利用RNN解决序列标注问题的通用优化思路.这个RNN优化思路应该

政府采购电子办公系统总结-思路篇

前言 政府采购电子办公系统是实现招标,投标,评标等过程的电子化管理.在这个系统中我所负责的是招标文件制作和档案管理.这篇文章里我主要介绍一下对于这两部分业务的实现思路. 招标文件制作 实现思路 提炼出招标文件中相对来说容易变化的内容,这些内容因不同的招标项目而异.如:招标项目名称,采购单位,招标开始日期等.这些信息做成表单由用户来填写. 制作一个招标文件模板,在出现上述可变内容的地方写成"{}". 在生成招标文件时获得用户的信息,利用Aspose.Word替换上述模板中的"{

头像服务端设计思路

思路 一 把图片上传到服务端.命名以用户的(用户名md5)作为文件名.要是以前有文件,覆盖以前的文件 二编写一个servlet处理获取头像请求. servlet接收一个用户名md5+大小的参数 根据 用户名md5+大小生成对应的图片 例如 用户名为ada 上传到服务端的位置为 /gravatar/ada.jpg 请求地址:/webstore/headimg/ada.jpg?s=120 对应的服务端文件地址 /gravatar/ada.jpg(原图片) /gravatar/ada/120.jpg