2021.5.6:NullPointerException

Java标准库定义的常用异常包括:

 

 在所有的RuntimeException异常中,最常用的是NullPointerException,即空指针异常,俗称NPE。如果一个对象是null,调用其方法或者访问其属性时就会产生NullPointerException,这个异常通常是由JVM抛出的。

处理NullPointerException

必须明确的是,NullPointerException是一种代码逻辑错误,遇到NullPointerException,遵循原则是早暴露、早修复,严禁使用catch来隐藏这种编码错误,好的编码习惯可以极大地降低NullPointerException的产生,例如:

  1. 初始化String为空字符串""而非null
    public class Person{
        private String name="";
    }

    使用空字符串""而不是默认的null可以避免很多NullPointerException,编写业务逻辑时,用空字符串""表示未填写比null安全很多。

  2. 返回空字符串""、空数组而不是null
    public String[] readLinesFromFile(String file){
        if(getFileSize(file)==0){
            //返回空数组而非null
            return new String[0];
        }
    }

    这样可以使得调用方无须检查结果是否为null。

  3. 如果调用方一定要根据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

 

posted @   ShineLe  阅读(27)  评论(0编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示