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

Java中常见的空指针异常

参考链接:

  • java中什么是空指针异常以及为什么会产生空指针异常天上的云川的博客-CSDN博客什么是java空指针

  • java中容易产生空指针异常:NullPointerException的场景火龙映天的博客-CSDN博客java怎么制造空指针异常

  • java空指针异常是什么、怎么发生、如何处理僵尸道长毛小方的博客-CSDN博客空指针异常是什么

1. 名词解释

指针:指针中存放的是内存地址。

空:null

空指针:指针不指向任何内存地址(没有初始化分配内存,获得引用)

空指针异常:一个指针不指向任何内存地址,但仍被调用了。

打开 NullPointerException源码,开头就写明出现NullPointerException的原因:

  • Invoking a method from a null object:调用空对象的方法

    • obj.method() // obj对象不存在

  • Accessing or modifying a null object’s field:获取或修改空对象的字段

    • obj.setName("cjn") // obj对象不存在

  • Taking the length of null, as if it were an array:获取一个空数组的长度

    • array.length // array为null

  • Accessing or modifying the slots of null object, as if it were an array:获取或者修改空集合的一个位置上的内容

    • arr[100]=100; // array为null

  • Throwing null, as if it were a Throwable value:将null视为Throwable值

  • When you try to synchronize over a null object:当你尝试同步一个空对象

2. 代码测试

测试代码如下:

 package exception;​import cn.hutool.core.collection.CollUtil;import cn.hutool.core.util.StrUtil;import compare.User;​import java.util.Hashtable;import java.util.List;​/*** @ClassName NullPointerExceptionTest* @Description 产生空指针异常的原因:在null对象上调用方法或者获取属性* @Author Jiangnan Cui* @Date 2023/2/13 21:05* @Version 1.0*/public class NullPointerExceptionTest {public static void main(String[] args) {stringNullPointerException();collectionNullPointerException();packageClassNullPointerException();  }​/*** 测试字符串产生的空指针异常*/public static void stringNullPointerException(){System.out.println("测试字符串产生的空指针异常");String str = null;// 1. 字符串内容为null,调用字符串相关方法时会产生空指针异常//        if(!str.isEmpty()){//            System.out.println("str = " + str);//        }// 优化:先判断不为null,满足后再调用其所属方法if(str != null && !str.isEmpty()){System.out.println("str = " + str);}​// 2. 字符串内容为null,进行字符串内容比较时会产生空指针异常//        if(str.equals("test")){//            System.out.println("str = " + str);//        }// 优化:// a. 将不为null的字符串内容放在前方if("test".equals(str)){System.out.println("str = " + str);}// 2. 使用StrUtil.equals()方法比较,此时str放在前后均可以// str放在前面if(StrUtil.equals(str, "test")){System.out.println("str = " + str);}// str放在后面if(StrUtil.equals("test", str)){System.out.println("str = " + str);}}​/*** 测试包装类自动拆箱时产生的空指针异常*/public static void packageClassNullPointerException(){Integer integer = null;//        int number = integer;//        System.out.println("number = " + number);// 优化:先判空,再赋值int number = 0;if(integer != null){number = integer;}System.out.println("number = " + number);}​/*** 测试集合调用时产生的空指针异常*/public static void collectionNullPointerException(){// 1. 集合为空时,调用集合相关方法会产生空指针异常List<String> list = null;//        if(list.isEmpty()){//            System.out.println("我是空!");//        }// 优化:// a. 先判断是否是null,不为null时在判空if(list != null && list.isEmpty()){System.out.println("我是空!");}// 集合不为null时,也可以通过.size()方法判断集合是否为空if(list != null && list.size() > 0){System.out.println("我是空!");}// b. 使用工具类判断集合是否为空if(CollUtil.isEmpty(list)){System.out.println("我是空!");}​// 2. 向集合中添加元素产生空指针异常String key = null;String value = null;Hashtable<String,String> hashtable = new Hashtable<>();//        hashtable.put(key,value);// 优化:if(key != null && value != null){hashtable.put(key, value);}/*** 总结:*     分析:部分集合中不允许设置key或value为null,这类集合主要有:Hashtable、ConcurrentHashMap、ConcurrentSkipListSet、* ConcurrentLinkedDeque、ConcurrentLinkedQueue、LinkedBlockingDeque、LinkedBlockingQueue、ArrayBlockingQueue、* PriorityBlockingQueue等。*/}}

如有错误,欢迎批评指正!

相关文章:

Java中常见的空指针异常

参考链接&#xff1a; java中什么是空指针异常以及为什么会产生空指针异常天上的云川的博客-CSDN博客什么是java空指针 java中容易产生空指针异常&#xff1a;NullPointerException的场景火龙映天的博客-CSDN博客java怎么制造空指针异常 java空指针异常是什么、怎么发生、如何…...

d亚当替换工厂模式

对象工厂替代方案 一般,需要无需用模块构造器触发d运行时的挑剔循环检测的方法来注册工厂.很多时候,混合模块构造器正是想要方法,但它有全局全开或全闭的循环检测算法. 要全局关闭它,请在Main文件中,添加以下代码行: extern(C) __gshared string[] rt_options ["oncycl…...

Real-time Scene Text Detection with Differentiable Binarization

Abstract 近年来&#xff0c;基于分割的方法在文本检测场景中非常流行&#xff0c;因为分割结果可以更准确地描述曲线文本等各种形状的场景文本。然而&#xff0c;二值化的后处理对于分割检测是必不可少的&#xff0c;它将分割方法产生的概率图转换为文本框/区域。本文提出了一…...

国外客户只想跟工厂合作?可以这样破解

1.客户是愿意和外贸公司合作还是更愿意和工厂合作&#xff1f;一个外贸公司的朋友说:“我去工厂接待过七八次外国人&#xff0c;基本上都是英国、德国、日本、加拿大、美国的。”贸易公司根本不避讳自己是贸易公司&#xff0c;外国人也不在乎。他们更关心的是贸易公司能否妥善安…...

c++重中之重:“换个龟壳继续套娃“:运算符重载等的学习

文章目录 前言一.运算符重载二.const成员三.取地址重载总结前言 上一期我们讲到类的6个默认构造函数中的拷贝构造函数&#xff0c;这一期我们继续往下讲&#xff0c;当然难点肯定是运算符重载了。 一、运算符重载 运算符重载是c为了增强代码的可读性引入了运算符重载&#xf…...

RabbitMQ简单使用

这篇文章通过一个最简单的例子&#xff0c;让初学者能了解RabbitMQ如何完成生产消息和消息的。 所有的程序员在学习一门新技术的时候&#xff0c;都是从 Hello World 进入到Colorful World的&#xff0c;本节也将按照惯例&#xff0c;从HelloWorld开始&#xff0c;演示RabbitMQ…...

Lambda表达式

&#x1f44c; 棒棒有言&#xff1a;也许我一直照着别人的方向飞&#xff0c;可是这次&#xff0c;我想要用我的方式飞翔一次&#xff01;人生&#xff0c;既要淡&#xff0c;又要有味。凡事不必太在意&#xff0c;一切随缘&#xff0c;缘深多聚聚&#xff0c;缘浅随它去。凡事…...

JSON数据格式【学习记录】

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

LeetCode——1234. 替换子串得到平衡字符串

一、题目 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符&#xff0c;且长度为 n 的字符串。 假如在该字符串中&#xff0c;这四个字符都恰好出现 n/4 次&#xff0c;那么它就是一个「平衡字符串」。 给你一个这样的字符串 s&#xff0c;请通过「替换一个子串」的方式&a…...

Web自动化测试——selenium篇(二)

文章目录一、浏览器相关操作二、键盘操作三、鼠标操作四、弹窗操作五、下拉框选择六、文件上传七、错误截图一、浏览器相关操作 浏览器窗口大小设置 driver.manage().window().maximize();//窗口最大化 driver.manage().window().minimize();//窗口最小化 driver.manage().wi…...

RK3399平台开发系列讲解(文件系统篇)虚拟文件系统的数据结构

🚀返回专栏总目录 文章目录 一、超级块二、挂载描述符三、文件系统类型四、索引节点五、目录项沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍虚拟文件系统的数据结构。 一、超级块 文件系统的第一块是超级块,用来描述文件系统的总体信息。当我们把文件系…...

企业财务管理升级,智慧税务和数据可视化打造新标准

一、引言在发展社会主义市场经济的过程中&#xff0c;税收承担着组织财政收入、调控经济、调节社会分配的职能。中国每年财政收入的90%以上来自税收&#xff0c;其地位和作用越来越重要&#xff0c;可称之为国家经济的“晴雨表”&#xff0c;有效进行税务管理、充分挖掘税务大数…...

JFET(结型场效应管)

JFET的结构示意图 参考&#xff1a;https://blog.csdn.net/weixin_45882303/article/details/106008695 下图是实际结构图&#xff0c; 下面是原理图和符号表示&#xff08;参考连接中的图片&#xff09; 分析 VGS 对电压id的控制&#xff08;固定VDS&#xff09; 当让D和…...

oceanbase部署--使用OBD部署obagent和promethous_grafana软件

obagent OBAgent 通常部署在 OBServer 节点上。OBAgent支持推、拉两种数据采集模式&#xff0c;可以满足不同的应用场景。 OBAgent默认支持的插件包括主机数据采集、OceanBase 数据库指标的采集、监控数据标签处理和 Prometheus 协议的 HTTP 服务。 1&#xff09;编辑 OBAgent …...

浏览器广告拦截插件| 浏览器搜索广告横飞怎么办

文章目录浏览器广告拦截插件| 浏览器搜索广告横飞怎么办一、效果二、安装浏览器广告拦截插件| 浏览器搜索广告横飞怎么办 浏览器广告横飞怎么办&#xff1f;今天教你一招解决&#xff01;很多小伙伴说自己用的浏览器总是有广告。 今天咱们就针对这个问题分享一个浏览器插件&a…...

Redis优化内存篇

【内存消耗】 场景&#xff1a;业务ID->图片ID&#xff08;KV:partnerId->objectId&#xff09;。 刚开始&#xff0c;我们保存了1亿张图片&#xff0c;大约用了6.4GB的内存。 随着图片数据量的不断增加&#xff0c;Redis变慢了。 新的认知&#xff1a;String类型并不是适…...

Vue原理解析

文章目录1. VUE的响应式原理1.1 ViewModel1.2 双向绑定的基本原理1.3 什么是响应性1.4 Vue 中的响应性是如何工作的2. Vue 渲染机制2.1 虚拟 DOM2.2 渲染管线2.3 带编译时信息的虚拟 DOM2.3.1 静态提升2.3.2 修补标记 Flags2.3.3 树结构打平2.3.4 对 SSR 激活的影响1. VUE的响应…...

C# Lambda表达式含义及各种写法

Lambda表达式在各个语言中的表达方式都不太相同&#xff0c;本文重点介绍C#的Lambda表达式。 首先&#xff0c;Lambda表达式就是一个匿名的方法/函数。 以下面的一个完整版作为例子&#xff0c;前面是参数&#xff0c;后面是返回值&#xff1a; 由于 Lambda表达式和委托常常一起…...

计算机组成原理:1. 计算机系统概论

更好的阅读体验\huge{\color{red}{更好的阅读体验}}更好的阅读体验 文章目录1.1 计算机系统简介1.1.1 计算机软硬件概念1.1.2 计算机的层次1.1.3计算机组成和计算机体系结构1.2 计算机的基本组成1.2.1 冯诺伊曼计算机的特点1.2.2 计算机的硬件框图1.2.3 计算机的工作步骤1.3 计…...

【c#】c#常用小技巧方法整理(5)—— 字符串操作类

1、GetStrArray(string str, char speater, bool toLower) 把字符串按照分隔符转换成 List 2、GetStrArray(string str) 把字符串转 按照, 分割 换为数据 3、GetArrayStr(List list, string speater) 把 List 按照分隔符组装成 string 4、GetArrayStr(List list) 得到数组列表以…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...