java中容易产生空指针异常:NullPointerException的场景
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的场景相关推荐
- java中什么是空指针异常_JAVA中的空指针异常如何处理?
你这个问题的解决 问题定位: 在堆栈异常信息的第一行就可以定位到是哪里出了空指针,倘若这里不是你写的类,可以往下翻一下,找到你写的类,就是这里出现的空指针. 问题解决: 对一个空对象调用里面的方法或者 ...
- java中如何避免空指针异常
Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键.熟话说"预防胜于治疗",对于这么令人讨厌的空指针异常,这句话也是成立的.值得庆幸的是运用一 ...
- Java 中发生内存泄漏 5 个场景以及解决方法
前言 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和 Java 联系起来.在 Java 中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM ...
- java中什么是空指针异常
空指针异常是什么意思? 这里我们首先要明确什么是指针,指针指的是什么? 指针:指针存放的是内存地址 那什么是空? 举个例子:小明过生日,小华送给了小明一个"礼物& ...
- java中什么是空指针异常以及为什么会产生空指针异常
空指针异常是什么意思? 这里我们首先要明确什么是指针,指针指的是什么? 指针:指针存放的是内存地址 那什么是空? 举个例子:小明过生日,小华送给了小明一个"礼物",这 ...
- Java中的反射基础及其应用场景
1.基础 1.反射的定义: Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的 ...
- java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码
问题补充: 加载错误! 失败 JAVA.SQL.SQLEXCEPTION: NO SUITABLE DRIVER FOUND FOR JDBC:SQLSERVER://LOCALHOST:1433;D ...
- java中InputStream和OutputStream的使用场景
java的I/O中有两种基本的流类型 分别是 输入流InputStream 输出流OutputStream 有的时候很容易搞混使用的顺序,只需要记住: 输入流是把数据从别的地方读入本程序的内存 输出流 ...
- Java中如何处理空指针异常
程序中的变量是 null,就意味着它没有引用指向或者说没有指针.这时,我们对这个变量进行任何操作,都必然会引发空指针异常,本文主要介绍了Java中怎样处理空指针异常,感兴趣的可以了解一下 程序中的变量 ...
最新文章
- 芯片如何储存信息_机器视觉检测设备相机的分辨率是如何定义的怎么分类?
- Java-Web Servlet开发
- 爬虫爬出来的数据不全_斥巨资学完Python数据分析后,给运营人总结7个小建议...
- CSS3实现纸张边角卷起效果
- layer 同步调用_关于Layer组件的同步以及减少GPU带宽的问题
- java堆外内存溢出_JVM 案例 - 堆外内存导致的溢出错误
- collections模块之namedtuple
- 【图像处理】透视变换 Perspective Transformation(小细节修正和推导流程补充)
- matlab 矩阵列乘系数,matlab 给某一列乘上一个系数
- c# 构造sql语句
- SQLAlchemy 增删改查
- linux扩展磁盘空间命令_在Linux上监视磁盘空间– SQL Server DBA的有用命令
- 浏览器端的九种缓存机制介绍
- 大学计算机基础模拟系统2014综合第三套,秋第三套计算机一级试题.doc
- 为什么算法工程师也叫调参狗?
- java的常量池的大小,Java 常量池注意点
- 好性格让孩子受用终生
- 计算机的6种典型应用领域,人工智能已经广泛应用到许多领域,其典型的应用包括这些...
- Magic3D(MyGUI)简单使用
- Visio--用例图、类图、顺序图、活动图
热门文章
- Stata 新命令 readWind:快速读入并转换万德数据
- Nginx系列1: 正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
- 群晖、威联通NAS硬盘本地化,使用RaiDrive通过WebDAV实现内网挂载
- mos管的rc吸收电路计算_RC吸收计算应用.doc
- 计算机系统结构知识总结,计算机基础知识总结
- 在python中设置静态变量
- math函数常用操作
- 关于开源的RTP——jrtplib的使用(2)
- SQL:OUTER JOIN用法详解
- 微信小程序名片3:0大战纸质名片,你应该知道如何选择了吧