java中空指针异常:NullPointerException出现的根本原因是在null对象上调用方法或属性了。
java中容易产生空指针异常:NullPointerException的场景,总结如下:

1.判断字符串是否为空

风险代码:

String str = null;
if (str.isEmpty()) { // 空指针异常// 代码逻辑
}

修改后的代码:

String str = null;
if (str != null && str.isEmpty()) { // 无异常// 代码逻辑
}

分析:字符串为null时,直接调用isEmpty方法就会报空指针异常。一种解决方案如上,先判断字符串是否为null,不为null再执行isEmpty方法。

2.字符串比较

风险代码:

String str = null;
if (str.equals("A")) { // 空指针异常// 代码逻辑
}

修改后的代码:

String str = null;
if ("A".equals(str)) { // 无异常// 代码逻辑
}

分析:字符串为null时,直接调用equals方法就会报空指针异常。一种解决方案如上,在常量上调用equals方法就可避免空指针异常。如果比较的两个字符串都是变量,那就只有先判断null,不为null再执行了。类似的场景还有:equalsIgnoreCase方法。

3.集合类添加元素

风险代码:

String str = null;
String value = null;
Hashtable<String, String> hashtable = new Hashtable<>();
hashtable.put(key, value); // 空指针异常

修改后的代码:

String key = null;
String value = null;
Hashtable<String, String> hashtable = new Hashtable<>();
if (key != null && value != null) {hashtable.put(key, value); // 无异常
}

分析:部分集合中不允许设置key或value为null,这类集合主要有:Hashtable、ConcurrentHashMap、ConcurrentSkipListSet、ConcurrentLinkedDeque、ConcurrentLinkedQueue、LinkedBlockingDeque、LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue等。

4.判断集合是否为空

风险代码:

ArrayList array = null;
if (array.isEmpty()) { // 空指针异常// 代码逻辑
}

修改后的代码:

ArrayList array = null;
if (array != null && array.isEmpty()) { // 无异常// 代码逻辑
}

分析:集合在判空时与字符串判空类似,如果集合为null,直接调用isEmpty方法会报空指针异常。一种解决方案如上,先判断集合是否为null,不为null再执行isEmpty方法。数组的判空也是类似。

5.包装类自动拆箱

风险代码:

Integer integer = null;
int number = integer; // 空指针异常

修改后的代码:

Integer integer = null;
if (integer != null) {int number = integer; // 无异常
}

分析:基础数据类型:boolean、byte、char、short、int、float、double、long的包装类:Boolean、Byte、Character、Short、Integer、Float、Double、Long在自动拆箱时会有空指针异常风险。所以在使用时必须先判断是否为null,不为null再使用。

java中容易产生空指针异常:NullPointerException的场景相关推荐

  1. java中什么是空指针异常_JAVA中的空指针异常如何处理?

    你这个问题的解决 问题定位: 在堆栈异常信息的第一行就可以定位到是哪里出了空指针,倘若这里不是你写的类,可以往下翻一下,找到你写的类,就是这里出现的空指针. 问题解决: 对一个空对象调用里面的方法或者 ...

  2. java中如何避免空指针异常

    Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键.熟话说"预防胜于治疗",对于这么令人讨厌的空指针异常,这句话也是成立的.值得庆幸的是运用一 ...

  3. Java 中发生内存泄漏 5 个场景以及解决方法

    前言 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和 Java 联系起来.在 Java 中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM ...

  4. java中什么是空指针异常

    空指针异常是什么意思?        这里我们首先要明确什么是指针,指针指的是什么? 指针:指针存放的是内存地址 那什么是空?        举个例子:小明过生日,小华送给了小明一个"礼物& ...

  5. java中什么是空指针异常以及为什么会产生空指针异常

    空指针异常是什么意思? 这里我们首先要明确什么是指针,指针指的是什么? 指针:指针存放的是内存地址 那什么是空?        举个例子:小明过生日,小华送给了小明一个"礼物",这 ...

  6. Java中的反射基础及其应用场景

    1.基础 1.反射的定义: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的 ...

  7. java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码

    问题补充: 加载错误! 失败 JAVA.SQL.SQLEXCEPTION: NO SUITABLE DRIVER FOUND FOR JDBC:SQLSERVER://LOCALHOST:1433;D ...

  8. java中InputStream和OutputStream的使用场景

    java的I/O中有两种基本的流类型 分别是 输入流InputStream 输出流OutputStream 有的时候很容易搞混使用的顺序,只需要记住: 输入流是把数据从别的地方读入本程序的内存 输出流 ...

  9. Java中如何处理空指针异常

    程序中的变量是 null,就意味着它没有引用指向或者说没有指针.这时,我们对这个变量进行任何操作,都必然会引发空指针异常,本文主要介绍了Java中怎样处理空指针异常,感兴趣的可以了解一下 程序中的变量 ...

最新文章

  1. 芯片如何储存信息_机器视觉检测设备相机的分辨率是如何定义的怎么分类?
  2. Java-Web Servlet开发
  3. 爬虫爬出来的数据不全_斥巨资学完Python数据分析后,给运营人总结7个小建议...
  4. CSS3实现纸张边角卷起效果
  5. layer 同步调用_关于Layer组件的同步以及减少GPU带宽的问题
  6. java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误
  7. collections模块之namedtuple
  8. 【图像处理】透视变换 Perspective Transformation(小细节修正和推导流程补充)
  9. matlab 矩阵列乘系数,matlab 给某一列乘上一个系数
  10. c# 构造sql语句
  11. SQLAlchemy 增删改查
  12. linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令
  13. 浏览器端的九种缓存机制介绍
  14. 大学计算机基础模拟系统2014综合第三套,秋第三套计算机一级试题.doc
  15. 为什么算法工程师也叫调参狗?
  16. java的常量池的大小,Java 常量池注意点
  17. 好性格让孩子受用终生
  18. 计算机的6种典型应用领域,人工智能已经广泛应用到许多领域,其典型的应用包括这些...
  19. Magic3D(MyGUI)简单使用
  20. Visio--用例图、类图、顺序图、活动图

热门文章

  1. Stata 新命令 readWind:快速读入并转换万德数据
  2. Nginx系列1: 正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
  3. 群晖、威联通NAS硬盘本地化,使用RaiDrive通过WebDAV实现内网挂载
  4. mos管的rc吸收电路计算_RC吸收计算应用.doc
  5. 计算机系统结构知识总结,计算机基础知识总结
  6. 在python中设置静态变量
  7. math函数常用操作
  8. 关于开源的RTP——jrtplib的使用(2)
  9. SQL:OUTER JOIN用法详解
  10. 微信小程序名片3:0大战纸质名片,你应该知道如何选择了吧