Java中的NullPointerException(空指针异常)

当尝试调用一个null对象的方法时,会抛出NullPointerException。文章通过一个代码示例解释了这个问题,描述了Java虚拟机如何处理这种异常,包括创建异常对象、打印栈信息,并最终导致程序退出。栈信息对于调试异常至关重要,因为它显示了异常发生的完整调用路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NullPointerException(空指针异常)

我们来看段代码:

public class ExceptionTest {

public static void main(String[] args) {

String s = null;

s.indexOf("a");

System.out.println("end");

}

}

变量s没有初始化就调用其实例方法indexOf,运行,屏幕输出为:

Exception in thread "main" java.lang.NullPointerException

at ExceptionTest.main(ExceptionTest.java:5)输出是告诉我们:在ExceptionTest类的main函数中,代码第5行,出现了空指针异常(java.lang.NullPointerException)。

但,具体发生了什么呢?当执行s.indexOf("a")的时候,Java虚拟机发现s的值为null,没有办法继续执行了,这时就启用异常处理机制,首先创建一个异常对象,这里是类NullPointerException的对象,然后查找看谁能处理这个异常,在示例代码中,没有代码能处理这个异常,因此Java启用默认处理机制,即打印异常栈信息到屏幕,并退出程序。

在介绍函数调用原理的时候,我们介绍过栈,异常栈信息就包括了从异常发生点到最上层调用者的轨迹,还包括行号,可以说,这个栈信息是分析异常最为重要的信息。

Java的默认异常处理机制是退出程序,异常发生点后的代码都不会执行,所以示例代码中的System.out.println("end")不会执行。

https://www.bilibili.com/video/BV13G4y1T79d/?spm_id_from=333.999.0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值