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

news2024/11/16 10:46:55

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.coloradmin.cn/o/342333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业需要ERP系统的6个必要原因

你的企业在月底核对财务交易的时间是否比应有的时间长?你是否依靠猜测而不是核心事实和数字来预测销售?你是否感觉到客户满意度下降了?如果是的话,那么这些都是你的企业迫切需要一个高效的ERP系统的信号。 这里有一些原因表明&am…

JSON数据格式【学习记录】

JSON介绍 JSON(JavaScript Objet Notation)是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它采用一种键:值对的文本格式来存储和表示数据,在系统交换数据过程中常常被使用,是…

linux的三权分立设计思路和用户创建(安全管理员、系统管理员和审计管理员)

目录 一、三权分立设计思路 1、什么是三权 2、三员及权限的理解 3、三员之三权 4、权限划分 5、“三员”职责 6、“三员”配置要求 二、linux三权分立的用户创建 1、系统管理员 2、安全管理员 3、审计管理员 一、三权分立设计思路 1、什么是三权 三权指的是配置、…

小微企业真的需要CRM吗?

小型企业真的需要CRM吗?小型企业不需要CRM -它太贵了,不是必需品,对吧?错! 在本文中,我们将解释什么是小型企业CRM,小型企业何时应该实施CRM,哪些行业可以从CRM中受益,并…

MySQL数据库12——视图(VIEW)

视图概念 视图是一个虚拟表,称其为虚拟表的原因是:视图内的数据并不属于视图本身,而属于创建视图时用到的基本表。可以认为,视图是一个表中的数据经过某种筛选后的显示方式;或者多个表中的数据经过连接筛选后的显示方…

上手ElasticSearch必须了解的核心概念

ElasticSearch概述ElasticSearch(简称 ES) 是一个分布式的使用 REST 接口的搜索引擎,属于非关系型数据库。它是在 lucene 的基础上进行研发的,隐藏了 lucene 的复杂性,提供简单易用的 RESTful Api接口。ES 的分片相当于…

HTTP、WebSocket和Socket.IO

一、HTTP协议 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)。HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同, 用于客户端和服务器之间的通信。请求访问文本或图像等资源的一端称为客户端, 而提供资源响应的一端称…

七天实现一个go rpc框架

目录rpc协议目的关于RPC和框架服务端与消息编码确保接口的实现消息的序列化与反序列化通信过程服务端的实现main 函数支持并发与异步的客户端Call 的设计实现客户端服务注册(service register)通过反射实现 service集成到服务端超时处理创建连接超时Client.Call 超时服务端处理…

C语言(联合和枚举)

1.联合创建 联合是一种数据类型,它能在同一个内存空间中存储不同的数据类型(非同时存储) 创建联合和创建结构的方式相同,需要一个联合模板和联合变量。使用关键字union union hold{ int digit; double bigfl; char letter; } 以上…

十、STM32端口复用重映射

目录 1.什么是端口复用? 2.如何配置端口复用? 3.什么是端口重映射 ? 4.什么是部分重映射和完全重映射? 5.重映射的配置过程 1.什么是端口复用? STM32有很多外设,外设的外部引脚与GPIO复用。也就是说一…

Vue|初识Vue

Vue是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 初识Vue1. Vue简介2. 开发准备3. 模板语法3.1 差值语法3.2 指令语法4. 数据绑定4.1 单向数据…

工厂模式详解

工厂模式 工厂模式顾名思义就是生产实例的工厂,使用工厂模式不会在程序中使用new关键字创建实例。而是将创建对象的细节隐藏,对外提供统一的方法,外部通过该方法获取实例。以此降低调用者与程序之间的耦合性,更加灵活 工厂模式可…

ccc-Brief Introduction of Deep Learning-李宏毅(6)

文章目录Three Steps for Deep LearningFully Connect Feedforward NetworkMatrix OperationOutput Layer as Multi-Class ClassifierExample ApplicationNeural NetworkGoodness of functionPick the best functionThree Steps for Deep Learning 与机器学习三步骤基本相同。 …

sql的case when用法详解

简单CASE WHEN函数: CASE SCORE WHEN A THEN 优 ELSE 不及格 END CASE SCORE WHEN B THEN 良 ELSE 不及格 END CASE SCORE WHEN C THEN 中 ELSE 不及格 END等同于,使用CASE WHEN条件表达式函数实现: CASE WHEN SCORE A THEN 优WHEN SCORE …

数据存储领域的“归档Archive”

档案圈的朋友想必对档案领域的“归档”一词已经耳熟能详,按照DA/T 58-2014《电子档案管理基本术语》中的定义,归档(Archiving)是指“按照国家规定将具有保存价值的电子文件及其元数据的保管权交给档案部门的过程”。 今天我们要聊…

FreeRTOS任务通知 | FreeRTOS十二

目录 说明: 一、任务通知 1.1、什么是任务通知 1.2、任务通知优势与劣势 1.3、任务通知值的更新方式 1.4、任务通知值状态 1.5、任务通知状态 1.6、任务通知方式类型 二、任务通知相关API函数 2.1、常用的发送通知API函数 2.2、带通知值的发送通知函数 …

STL中重要容器vector总结

你要尽全力保护你的梦想。那些嘲笑你的人,他们必定会失败,他们想把你变成和他们一样的人。如果你有梦想的话,就要努力去实现。 ——《当幸福来敲门》引言:C中STL里面的容器用法很巧妙,可以解决很多复杂的模型&#xff…

LEADTOOLS 22.0.6 UPDATE-Crack

OCR SDK 库 许多 OCR 增强功能 LEAD 行业领先的人工智能 OCR SDK 在以下方面获得了显着的识别优化:斜体、大写和小写字母、文本行组装和单词构建、列检测、基线检测和文本行分割。 LEADTOOLS为.NET 6、. NET Framework、Xamarin、UWP、C#、VB、C/C、Java、Objective…

OpenCV形态学处理

OpenCV形态学处理1、膨胀2、腐蚀3、开/闭运算4、示例膨胀、腐蚀、开运算、闭运算 1、膨胀 膨胀就是求局部最大值的操作,膨胀的数学表达式: dst⁡(x,y)max⁡(x′,y′):1ement⁡(x′,y′)≠0src⁡(xx′,yy′)\operatorname{dst}(x, y)\max _{\left(x^{\pr…

搭建mysql主从复制

前言: 👏 作者简介:我是笑霸final,一名热爱技术的在校学生。 📝 个人主页:个人主页1 || 笑霸final的主页2 📕 系列专栏:数据库 📧 如果文章知识点有错误的地方&#xff0…