2021.5.6:NullPointerException
Java标准库定义的常用异常包括:
在所有的RuntimeException异常中,最常用的是NullPointerException,即空指针异常,俗称NPE。如果一个对象是null,调用其方法或者访问其属性时就会产生NullPointerException,这个异常通常是由JVM抛出的。
处理NullPointerException
必须明确的是,NullPointerException是一种代码逻辑错误,遇到NullPointerException,遵循原则是早暴露、早修复,严禁使用catch来隐藏这种编码错误,好的编码习惯可以极大地降低NullPointerException的产生,例如:
- 初始化String为空字符串""而非null
public class Person{ private String name=""; }
使用空字符串""而不是默认的null可以避免很多NullPointerException,编写业务逻辑时,用空字符串""表示未填写比null安全很多。
- 返回空字符串""、空数组而不是null:
public String[] readLinesFromFile(String file){ if(getFileSize(file)==0){ //返回空数组而非null return new String[0]; } }
这样可以使得调用方无须检查结果是否为null。
- 如果调用方一定要根据null判断,比如返回null表示文件不存在,那么可以考虑返回Optional<T>:
public Optional <String> readFromFile(String file){ if(!fileExist(file)){ return Optional.empty(); } ... }
这样调用方必须通过Optional.isPresent()判断是否有结果。
定位NullPointerException
从Java 14开始,如果产生了NullPointerException,JVM可以给出详细的信息告诉我们null对象到底是谁。
可以在NullPointerException的详细信息中心看到类似because xxx is null的语句,直接指明xxx是null,装我们就能快速定位问题所在。
这种方法是Java14新增的功能,但是默认是关闭的,我们可以给运行Java文件时,通过参数-XX:+ShowCodeDetailsInExceptionMessages来启用它:
java -XX:+ShowCodeDetailsInExceptionMessages Main.java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南