当前位置: 首页 > news >正文

手把手教你解决传说中的NPE空指针异常

1. 前言

最近有好几个初学java的小伙伴,甚至是学习到了JavaWeb、框架阶段的小伙伴也跑来问壹哥,该如何解决Java中的NullPointerException空指针异常。因为NPE是初学者特别常见的典型异常,所以壹哥在这里专门写一篇文章,来手把手地教大家分析解决这个经典异常问题。

2. 异常现象

首先我们来看看这个既简单,又经常出现的空指针异常NullPointerException,下面这段代码运行后就会抛出NPE空指针异常。

package test;/*** @author 千锋壹哥*/
public class TestNullPoint {public static void main(String[] args) {String str = "千锋壹哥";boolean flag = str.equals("千锋壹哥");System.out.println("===equals对比结果====" + flag);str = null;flag = str.equals("千锋壹哥");System.out.println("===equals对比结果====" + flag);}
}

运行结果:

3. 异常原因

那么上述代码为什么会产生NPE问题呢?下面壹哥就来给各位小伙伴解释一下产生该异常的原因。

String str = "千锋壹哥"; 字符串中此时的值为”千锋壹哥“;
boolean flag = str.equals("千锋壹哥"); 调用str字符串的equals方法进行字符串比较,此时str变量有具体的值,值为”千锋壹哥“,所以可以正常调用;
str = null; 给str字符串设置为空值null,我们知道null没有任何方法可以调用;
所以代码当运行到 flag = str.equals("千锋壹哥");这行代码的时候,就会抛出空指针异常,因为此时str变量的值是null。

4. 解决办法

既然我们现在找到了问题原因,那么我们很容易就能解决该问题了,解决思路如下:

当程序一旦抛出NullPointerException异常,肯定是因为某个变量的值为null,而你又引用了这个变量,null空值是没有任何方法可以调用的,所以抛出了这个异常;
明确原因之后,接着就要定位产生异常的位置,比如我们从上面的运行截图中,可以看到异常所在的代码行数为TestNullPoint类的第14行,报错如下:

也就是说在第14行代码中,有值为null的变量调用了方法,我们只需要找到那个变量将它的值改为非空即可。

修改后的代码如下:

5. 总结

NullPointerException空指针异常是因为有变量的值为空null,然后我们在代码中又调用了这个变量的方法而导致的。我们只需要找到这个变量,然后将这个变量的值改为非空即可解决NPE异常。现在你知道NPE是怎么产生以及怎么解决的了吗?如果你还有什么问题,可以在评论区留言哦。

关注壹哥,收获多多,每天给你不一样的的知识和启发!

http://www.lryc.cn/news/4858.html

相关文章:

  • 【pytorch安装】conda安装pytorch无法安装cpu版本(完整解决过程)
  • 云计算ACP云服务器ECS实例题库
  • 面试题:作用域、变量提升、块级作用域、函数作用域、暂存性死区、var和let的区别
  • JAVA练习49-爬楼梯
  • 深兰科技机器人商丘制造基地正式投产,助力商丘经济高质量发展
  • ES倒排索引/查询、写入流程
  • 2023软考考哪个证书好?
  • 一般人我劝你不要自学软件测试!!!
  • docker/docker-compose 安装mysql5.7
  • 【C++设计模式】学习笔记(6):Bridge 桥模式
  • Allegro如何批量快速修改复用好的模块操作指导
  • 让我百思不得其解的infer究竟是怎么推导类型的?
  • E8-怎么实现根据表单内容自动生成标题
  • 《c语言深度解剖》--一套非常经典的笔试题
  • 【数据结构与算法】单调队列 | 单调栈
  • openh264解码h264视频帧主流程
  • 【个人笔记】C语言位域
  • ROS笔记(1)——ROS的核心概念
  • 动态SQL使用【JavaEE】
  • leetcode刷题
  • 移动设备安全管理基础指南
  • 【Java|多线程与高并发】 使用Thread 类创建线程的5种方法如何查看程序中的线程
  • 零基础学MySQL(五)-- 详细讲解数据库中的常用函数
  • 第4章 流程控制-if-else,Switch,For循环(循环守卫,循环步长,倒叙打印),While循环,多重循环...
  • 2.4G-WiFi连接路由器过程
  • 3. SpringMVC Rest 风格
  • Python3简介
  • 如何学习PMP?
  • 【DSP视频教程】第11期:插补算法,曲线拟合丝滑顺畅,统计函数和基础函数加速实现,汇集SIMD,饱和和MAC乘累加应用实战(2023-02-12)
  • 分类模型评估:混淆矩阵、准确率、召回率、ROC