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

相关文章
|
24天前
|
Java 编译器 数据库连接
Java——异常
在 Java 中,程序执行过程中的不正常行为被称为异常。异常分为 Error 和 Exception。Error 表示系统级错误,而 Exception 则封装程序可能出现的问题。异常包括编译时异常和运行时异常(如数组越界)。异常可用于查找 bug 信息和作为方法内部的特殊返回值。处理异常的方式有默认处理和捕获异常,后者通过 try-catch 结构实现。此外,还可以自定义异常类来更灵活地处理特定情况。
28 9
Java——异常
|
27天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
13天前
|
Java 编译器 索引
|
14天前
|
IDE Java 开发工具
java自定义异常20
java自定义异常20
17 3
|
14天前
|
IDE Java 开发工具
java捕获异常19
java捕获异常19
15 2
|
2月前
|
Java 数据库连接 程序员
Java 认识异常
Java 认识异常
14 1
|
1月前
|
Java C++
Java内存区域于内存溢出异常
这篇文章详细解释了Java虚拟机的内存区域划分、各区域的作用以及可能遇到的内存溢出异常情况。
38 0
|
12天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
32 2
|
4天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。
|
16天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理