首页 > 其他分享 >手把手教你解决传说中的NPE空指针异常

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

时间:2023-08-01 13:34:11浏览次数:38  
标签:变量 NPE 手把手 健哥 str null 异常 指针

1. 前言

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

2. 异常现象

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

image.png

  运行结果:

image.png

3. 异常原因

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

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

4. 解决办法

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

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

image.png

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

 

image.png

 

修改后的代码如下:

 

image.png

5. 总结

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

关注我,每天给你不一样的的知识和启发!

标签:变量,NPE,手把手,健哥,str,null,异常,指针
From: https://www.cnblogs.com/qian-fen/p/17596201.html

相关文章

  • 链表双指针技巧汇总 [labuladong-刷题打卡 day1]
    双指针合并21.合并两个有序链表比较简单的双指针比较算法,两个指针分别指向待合并链表/序列,比较后选择符合条件的指针移动Trick:链表在实现时,带头节点的链表在操作中更方便题解/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNo......
  • c指针
    指针变量数据类型*指针变量名;int*p;//定义了一个指针变量p,*是用来修饰变量的,说明p是个指针变量,变量名是p在定义指针变量的时候*代表修饰的意思修饰p是个指针变量。关于指针的运算符:&取地址*取值p=&a;//把a的地址给p赋值&是取地址符eg:p=&a;//p保存了a的地址,也可以......
  • 手把手教你在云环境炼丹(部署Stable Diffusion WebUI)
    前几天写了一篇《手把手教你在本机安装StableDiffusion秋叶整合包》的文章,有些同学反映对硬件的要求太高,显卡太TM贵了。今天我再分享一个云服务器炼丹的方法,方便大家快速入门上手,这个云服务不需要特殊网络设置,能连接公网网盘,随开随用,有3090显卡,也有4090显卡,不过我经常使用的是A5......
  • C语言---malloc(0)会产生什么结果,真的是空指针吗?
    前言(1)几天前在一个交流群中看到有人说,面试问malloc(0)会怎么样是真的恶心。(2)这个突然激起了我的好奇心。居然还可以malloc(0)?!(3)经过测试最后,发现是可行的。经过互联网的查找,肯哥的交流群以及自己的理解,梳理成这篇博客。(4)肯哥博客主页:架构师李肯;(5)感慨一下,群里面的大佬们不愧是有......
  • 【手写系列】手把手教你如何实现 列表转树-树转列表
    这个应该算是前端中经常出现的业务场景,不过大部分都是由组件库帮助你做好了这些事情如果要是让你自己来实现,你又会如何实现呢?今天,我们就来好好讲解下这两个需求该如何去写,在知道如何用的情况下,也要知道如何实现它们。从这篇文章你能学到(复习)什么东西JS中Map的用法递归......
  • 手把手带你入门 Spring Security!
    SpringSecurity是Spring家族中的一个安全管理框架,实际上,在SpringBoot出现之前,SpringSecurity就已经发展了多年了,但是使用的并不多,安全管理这个领域,一直是Shiro的天下。相对于Shiro,在SSM/SSH中整合SpringSecurity都是比较麻烦的操作,所以,SpringSecurity虽然功能比......
  • 指针1
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//指针的详细学习//指针就是变量,用来存放地址的变量,存在指针里面的变量被称为地址。//不同类型的指针可以储存各自数据,不过在解引用的时候会出现问题//因此指针类型决定了指针进行解引用的时候能够访问空间的大小,int*p,*p......
  • Go语言中指针详解
    指针在Go语言中是一个重要的特性,它允许你引用和操作变量的内存地址。下面是指针的主要作用和相关示例代码:1.引用传递在Go中,所有的变量传递都是值传递,即复制变量的值。如果你想在一个函数中修改一个变量的值,并希望这些改变在函数外部也有效,你就需要使用指针。通过传递一个变......
  • C# 使用SIMD向量类型加速浮点数组求和运算(4):用引用代替指针, 摆脱unsafe关键字,兼谈Unsa
    作者:zyl910目录一、引言二、办法说明2.1历史2.2局部引用变量与引用所指的值(类似指针的地址运算符&、间接运算符*)2.3重新分配局部引用变量(类似指针直接赋值)2.4引用地址调整(类似指针加减法)2.5引用地址比较(类似指针比较)2.6重新解释(类似C++的reinterpret_cast)2.7引用取消只......
  • 【Java】使用fastjson进行序列化时出现空指针异常问题研究
    最近在使用fastjson的JSONObject.toJSONString()方法将bean对象转为字符串的时候报如下错误:com.alibaba.fastjson.JSONException:writejavaBeanerror,fastjsonversion1.2.58,classcom.sun.proxy.$Proxy395,fieldName:0 atcom.alibaba.fastjson.serializer.JavaBeanS......