Java空指针异常:NullPointerException

article/2025/9/25 14:47:20

Java空指针异常(NullPointerException):空指针异常属于运行时异常(RuntimeException),即:编译会通过,但运行时会报异常。当你调用某个实例对象的方法时,如果该实例对象是个空引用,没有指向任何类,就会报空针。

日常开发中报空指针异常的常见场景:
场景1:调用某个对象的方法,但是实例化时,给该对象赋予了一个空引用,即该对象指向了空的引用,例如toString()

场景2:给引用变量赋值为null,自动拆箱时导致空指针异常

场景3:字符串常量未初始化,比较时顺序不当导致空指针异常,交换顺序即可避免报空指针异常

场景4:接口类型的对象没有使用具体的类进行初始化导致空指针异常

场景5:ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null,强行 put null 的 Key 或 Value 会出现空指针异常


import sun.applet.Main;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;/*** @Description 测试报空指针异常的常用场景* 总结与技巧:在遇到空指针错误时,要重点关注报错发生的所在行,通过空指针异常产生的两条主要原因(变量未初始化和对象为空)诊断具体的错误,主要注意以下几点:* 检查使用之前是否进行了初始化;* 尽量避免在函数中返回 null 值,如果必须要返回 null 值,一定要给出详细的注释信息;* 外部传值时,一定要及时的进行判空处理(除非有明确的说明可以为 null );* 使用 equals() 方法时,要遵循 "常量在前变量在后"的原则;* 使用 valueOf() 替换toString();* 通过返回空的 Collection 或 Array 来替代 null 值;* 使用注解 @NotNull、@Nullable;* 定义合理的默认值,遵守约定(比如设置默认值,设置是否允许为空,从而形成合理的约定);* 从数据库取数据,可以约束哪些字段不能为空。* Java中的8种数据类型,变量的值可以有其默认值,假如没有对其正常赋值,Java虚拟机是不能正确编译通过的,所以使用基本数据类型一般是不会引起空指针异常的。也就是说,在实际开发中大多数的空指针异常主要与对象的操作相关。**/
public class NullPointerExceptionTest {public static void main(String[] args) {//场景1:调用某个对象的方法,但是实例化时,给该对象赋予了一个空引用,即该对象指向了空的引用,例如toString()
//        AppendTest appendTest = null;
//        System.out.println(appendTest.toString());//场景2:给引用变量赋值为null,自动拆箱时导致空指针异常
//        Integer str = null;
//        int num = str;
//        System.out.println(num);//场景3:字符串常量未初始化,比较时顺序不当导致空指针异常,交换顺序即可避免报空指针异常
//        String str = null;
//        //不推荐把变量放常量前,当变量为空时,运行时报空指针,此处,把常量放变量前,即可避免报空指针
//        if (str.equals("zhangsan")){
//            System.out.println("相等");
//        }else{
//            System.out.println("不相等");
//        }//场景4:接口类型的对象没有使用具体的类进行初始化导致空指针异常
//        List list1;
//        List list2 = null;
//        List list3 = new ArrayList();
//        System.out.println("list1未被初始化,不能直接使用");
//        System.out.println("list2会报空指针" + list2.isEmpty());
//        System.out.println("list3正常运行" + list3.isEmpty());//场景5:ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null,强行 put null 的 Key 或 Value 会出现空指针异常//HashMap可以存入null,而ConcurrentHashMap不可以
//        HashMap<String, Object> map1 = new HashMap<>();
//        map1.put(null,null);ConcurrentHashMap map2 = new ConcurrentHashMap();map2.put(null,null);System.out.println(map2);}
}

在这里插入图片描述

总结与技巧:在遇到空指针错误时,要重点关注报错发生的所在行,通过空指针异常产生的两条主要原因(变量未初始化和对象为空)诊断具体的错误,主要注意以下几点:

  • 检查使用之前是否进行了初始化;
  • 尽量避免在函数中返回 null 值,如果必须要返回 null 值,一定要给出详细的注释信息;
  • 外部传值时,一定要及时的进行判空处理(除非有明确的说明可以为 null );
  • 使用 equals() 方法时,要遵循 "常量在前变量在后"的原则;
  • 使用 valueOf() 替换toString();
  • 通过返回空的 Collection 或 Array 来替代 null 值;
  • 使用注解 @NotNull、@Nullable;
  • 定义合理的默认值,遵守约定(比如设置默认值,设置是否允许为空,从而形成合理的约定);
  • 从数据库取数据,可以约束哪些字段不能为空。
  • Java中的8种数据类型,变量的值可以有其默认值,假如没有对其正常赋值,Java虚拟机是不能正确编译通过的,所以使用基本数据类型一般是不会引起空指针异常的。也就是说,在实际开发中大多数的空指针异常主要与对象的操作相关。

参考链接:https://blog.csdn.net/yaxuan88521/article/details/125079485

https://blog.csdn.net/x1113162924/article/details/126040562


http://chatgpt.dhexx.cn/article/rImSN182.shtml

相关文章

什么是空指针异常

日常开发过程中&#xff0c;最常见的异常莫过于NullPointerException&#xff0c;之前的时候&#xff0c;只是知道去找到报错的位置&#xff0c;然后去解决它&#xff0c;最近有空学习C语言&#xff0c;就去深究了下NullPointerException异常的本质。 发生NullPointerExceptio…

空指针异常的原因分析

空指针异常的原因分析&#xff1a; 1.当一个对象不存在时又调用其方法会产生异常obj.method() // obj对象不存在 2. 调用空对象的方法时就会抛出 NullPointerException 空指针异常 (对象自己new 或是spring管理的要加Autowired注解) 3.如果该对象是由spring容器进行依赖注入(DI…

如何有效的避免空指针异常

空指针异常如何避免&#xff0c;听听老司机分享一些条件反射式的使用经验。 | 喜欢听我叨叨的&#xff0c;直接看视频 | 01 开篇 空指针异常在新手程序员里面非常常见&#xff0c;不只是新手&#xff0c;所有初级、中级甚至是高级都不可避免。 本期主题的由来是因为有这样一位…

关于Integer的空指针异常

关于Integer的空指针异常 问题来源 当用Integer来接收数据后&#xff0c;需要将数据与0进行比较&#xff0c;看是不是0&#xff0c;但是如果Integer接收的数据是null的时候&#xff0c;就会报空指针异常。 public static void main(String[] args) {Integer a null;System.…

如何解决空指针异常

NPE异常相信 Java 程序员都很熟悉&#xff0c;是 NullPointerException 的缩写&#xff1b;最近业务需求开发的有点着急&#xff0c;测试环境就时不时的来个NPE异常&#xff0c;特别的头疼&#xff1b;作为出镜率最高的异常之一&#xff0c;一旦入行Java开发&#xff0c;可以说…

Java 空指针异常的若干解决方案

Java 中任何对象都有可能为空&#xff0c;当我们调用空对象的方法时就会抛出 NullPointerException 空指针异常&#xff0c;这是一种非常常见的错误类型。我们可以使用若干种方法来避免产生这类异常&#xff0c;使得我们的代码更为健壮。本文将列举这些解决方案&#xff0c;包括…

NullPointerException(空指针异常)

NullPointerException(空指针异常)对象为Null还拿来使用&#xff0c;就会出现此异常。 多的不说少的不聊&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; public class Main {public static void main(String[] args) {String str1 "";String str2 n…

Java中的空指针异常

Java中的空指针异常 一、什么是空指针异常&#xff1f; 1.1 异常的分类 NullPointerException是RuntimeException的一个子类&#xff0c;这是运行时异常&#xff0c;在编译时期不会触发。 1.2 空指针异常引入 Java是没有指针的&#xff0c;所以我们常说"Java 指针&quo…

PageRank算法介绍

互联网上有数百亿个网页&#xff0c;可以分为这么几类&#xff1a;不含有用信息的&#xff0c;比如垃圾邮件&#xff1b;少数人比较感兴趣的&#xff0c;但范围不是很广的&#xff0c;比如个人博客、婚礼公告或家庭像册&#xff1b;很多人感兴趣的并且十分有用的&#xff0c;比…

PageRank 算法(从原理到实现)

spark 系列 Spark 核心原理及运行架构 Spark RDD详解 Spark 常用算子大全 Spark SQL 详解 Spark GraphX 图计算入门基础 Spark PageRank 算法——从原理到实现 Spark PageRank spark 系列前言算法来源算法原理排名泄露排名下沉排名上升算法证明 PR值计算方法幂迭代法特征…

浅谈PageRank算法

TOC[目录] PageRank 是 由佩奇(Larry Page)等人提出 的 Google 最为有名的技术之一 PageRank 是一种基于随机游走 的 评价网站权值的算法 总之&#xff0c; PageRank 是一种十分重要的算法 不管在学术界 还是在产业界 Node Similarity(节点相似度) 假设在一个图G(V,E)中研究两…

PageRank算法 到 textRank

1. PageRank算法概述 PageRank,即网页排名&#xff0c;又称网页级别、Google左侧排名或佩奇排名。 是Google创始人拉里佩奇和谢尔盖布林于1997年构建早期的搜索系统原型时提出的链接分析算法&#xff0c;自从Google在商业上获得空前的成功后&#xff0c;该 算法也成为其他搜索引…

PageRank算法浅析

转载请注明出处&#xff01;&#xff01;&#xff01;http://blog.csdn.net/zhonghuan1992 本文是根据 Topic-Sensitive PageRank Google’s PageRank:The Math Behind the Search Engine http://blog.csdn.net/hguisu/article/details/7996185 http://blog.codinglabs.…

PageRank 算法详解

转载自&#xff1a;https://blog.csdn.net/m0_37786726/article/details/79864012 参考文献&#xff1a;https://blog.csdn.net/androidlushangderen/article/details/43311943 链接分析 在链接分析中有2个经典的算法&#xff0c;1个是PageRank算法&#xff0c;还有1个是HITS…

数据挖掘十大算法:PageRank算法原理及实现

一、PageRank的概念 PageRank&#xff0c;网页排名&#xff0c; 是一种由根据网页之间相互的超链接计算的技术&#xff0c;而作为网页排名的要素之一&#xff0c; 它由Larry Page 和 Sergey Brin在20世纪90年代后期发明&#xff0c;并以拉里佩吉&#xff08;Larry Page&#xf…

PageRank 算法及实例分析

本文一部分是针对图的PageRank 的实现&#xff0c;以及具体数据集的分析过程的记录。 另一部分是BFS的实现&#xff0c;并记录每一层的节点数。 数据集下载地址 soc-Slashdot0811 、 roadNet-CA 、 soc-LiveJournal1 1. java 实现代码 Main.java import java.util.List;pu…

PageRank算法(二)

原文地址&#xff1a;https://blog.csdn.net/monkey_d_meng/article/details/6556295 说明&#xff1a;这是我学习过程中看到对PageRank来龙去脉解释非常清晰的博客&#xff0c;博主很厉害&#xff0c;大家可以关注一下原创作者&#xff01; 一、PageRank算法的简单举例 Goo…

PageRank 算法实现

大数据管理与分析实验报告 实验一 大数据系统基本实验 实验二 文档倒排索引算法实现 实验三 PageRank 算法实现 实验目的 PageRank 网页排名的算法&#xff0c;曾是Google 发家致富的法宝。用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。通过对PageRank 的…

(简单介绍)PageRank算法

文章目录 前言引入形式化PageRank 前言 这个是一个经典算法&#xff0c;还是有必要了解的&#xff0c;这里由于讲得不会很详细&#xff0c;所以要求你有一点数学知识&#xff0c;如果有&#xff0c;看完这篇就大概明白PageRank是个啥了。本篇不涉及证明之类的&#xff0c;而是…

算法--PageRank

概念 PageRank是Google提出的算法&#xff0c;用于衡量特定网页相对于搜索引擎索引中的其他网页而言的重要程度。是Google创始人拉里佩奇和谢尔盖布林于1997年创造的PageRank实现了将链接价值概念作为排名因素。 GOOGLE PageRank并不是唯一的链接相关的排名算法&#xff0c;而…