18、Java——NullPointerException异常的原因和解决办法

简介: 18、Java——NullPointerException异常的原因和解决办法

1、NullPointerException异常原因


       一般空指针的原因就是:当前正在使用的变量没有对应的值


       也就是说:当前正在使用的变量没有引用指向对应的值/对象


       也可以这样说:Null Pointer就相当于Null Reference


       如下面的代码都会报空指针异常:


public class Main {
    public static void main(String[] args) {
        String str1 = null;
        System.out.println(str1.toLowerCase());  //NullPointerException
    }
}
public class Main {
    String str2;    //默认值为null
    public static void main(String[] args) {
        Main ma = new Main();
        System.out.println(ma.str2.toLowerCase());   //NullPointerException
    }
}

因为成员变量str2和局部变量str1都是默认为null,所以都没有具体的指向某个值/对象


       定位NullPointerException


       如果产生了NullPointerException,例如,调用a.b.c.x()时产生了NullPointerException,原因可能是:


               a是null;


               a.b是null;


               a.b.c是null;


       确定到底是哪个对象是null以前只能打印这样的日志:


               System.out.println(a);


               System.out.println(a.b);


               System.out.println(a.b.c);


       如下面的代码:


public class test20210629 {
    public static void main(String[] args) {
        Person p = new Person();    
        System.out.println(p.address.city);   //输出:null
        System.out.println(p.name[0]);      //输出:null
        System.out.println(p.address.city.toLowerCase());   //空指针异常
        System.out.println(p.name[0].toLowerCase());   //空指针异常
    }
}
class Person {
    String[] name = new String[2];
    Address address = new Address();
}
class Address {
    String city;
    String street;
    String zipcode;
}

       总结:


       空指针发生的原因:一个变量A没有值(或没有指向对应的对象),然后直接使用A的方法,或者将A当成参数传给其他对象/方法使用,就会报空指针异常!


2、NullPointerException异常解决办法


第一步,先看一下异常是怎么产生的,在输入一个这样的地址:http://localhost:8083/***/***/***/***?productId=564564564573534,在控制台就会如图所报错


3.png



第二步,要解决这样的空指针错误,就先要找到出错误的JAVA代码,点击就可以,如图:


2.png


第三步,定位到java代码后,在debug启动项目,并添加断点,怎么启动debug:http://jingyan.baidu.com/article/19020a0a65e142529c284241.html


1.gif



第四步,继续第一步的地址,在debug的模式下可以看到此字段的值是Null, 如图:



3.png


第五步,输入正确的productId,如正确的链接是:http://localhost:8083/***/***/***/***?productId=47681438955545,如图,debug模式下此字段就不是null,如图:


2.png



第六步,如果没有其他错误的话,此时页面也应该打开了


1.gif


 


1.gif

相关文章
|
4天前
|
存储 设计模式 缓存
从一个 NullPointerException 探究 Java 的自动装箱拆箱机制
这行代码一个对象方法都没有调用,怎么会抛出 NullPointerException 呢?
21 9
|
1天前
|
Java
如何在 Java 中处理“Broken Pipe”异常
在Java中处理“Broken Pipe”异常,通常发生在网络通信中,如Socket编程时。该异常表示写入操作的另一端已关闭连接。解决方法包括:检查网络连接、设置超时、使用try-catch捕获异常并进行重试或关闭资源。
|
4天前
|
存储 安全 Java
如何避免 Java 中的“ArrayStoreException”异常
在Java中,ArrayStoreException异常通常发生在尝试将不兼容的对象存储到泛型数组中时。为了避免这种异常,确保在操作数组时遵循以下几点:1. 使用泛型确保类型安全;2. 避免生类型(raw types)的使用;3. 在添加元素前进行类型检查。通过这些方法,可以有效防止 ArrayStoreException 的发生。
|
5天前
|
人工智能 Oracle Java
解决 Java 打印日志吞异常堆栈的问题
前几天有同学找我查一个空指针问题,Java 打印日志时,异常堆栈信息被吞了,导致定位不到出问题的地方。
19 2
|
8天前
|
Java 索引
如何避免在 Java 中引发`StringIndexOutOfBoundsException`异常
在Java中,处理字符串时若访问了不存在的索引,会抛出`StringIndexOutOfBoundsException`异常。为避免此异常,应确保索引值在有效范围内,例如使用`length()`方法检查字符串长度,并确保索引值不小于0且不大于字符串长度减1。
|
10天前
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
|
13天前
|
Java
Java“NullPointerException”解决
Java中的“NullPointerException”是常见的运行时异常,发生在尝试使用null对象实例的方法或字段时。解决方法包括:1. 检查变量是否被正确初始化;2. 使用Optional类避免null值;3. 增加空指针检查逻辑。
|
17天前
|
Java
让星星⭐月亮告诉你,Java异常分类[Throwable(Error/Exception(RuntimeException/其他异常)) 检查时异常 非检查时异常]
本文深入解析了Java异常处理机制,重点介绍了`Throwable`类及其子类`Error`和`Exception`,并通过实例代码、流程图和表格详细解释了异常的分类、区别及处理方法,帮助读者掌握异常处理的关键技巧,提升程序的稳定性和健壮性。
37 1
|
7天前
|
Java 容器
Java“NullPointerException”解决
Java中的“NullPointerException”是当程序试图使用一个空对象引用时抛出的异常。解决方法包括:检查变量是否为null、使用Optional类、利用断言和合理初始化变量等。确保代码健壯性,避免运行时错误。
Java基础异常-自定义异常
Java基础异常-自定义异常
Java基础异常-自定义异常