写代码时突然弹出“运行时错误:空指针”,程序直接卡死,很多人第一反应是懵。其实这问题挺常见,尤其是Java、C++这类语言里,搞清楚原理后,排查起来并不难。
啥叫空指针?
简单说,就是你让程序去操作一个“不存在”的对象。比如你让手机打电话,但手机根本没开机,自然打不了。程序里也一样,你调用一个还没创建的对象方法,就会触发空指针异常(NullPointerException)。
典型的出错场景
比如你在处理用户登录信息,从数据库查数据:
User user = getUserById(1001);
System.out.println(user.getName()); // 这里容易崩
如果id为1001的用户不存在,getUserById 返回 null,接下来调用 getName() 就会抛出空指针异常。
怎么快速定位?
看报错堆栈信息。运行时报错一般会告诉你哪一行出的问题。比如提示在第25行调用了 null 对象的方法,那就重点查这一行前面有没有做判空处理。
常见的修复方式
加上判空判断是最直接的办法:
User user = getUserById(1001);
if (user != null) {
System.out.println(user.getName());
} else {
System.out.println("用户不存在");
}
或者用 Java 8 的 Optional,让代码更安全:
Optional<User> userOpt = Optional.ofNullable(getUserById(1001));
userOpt.ifPresent(u -> System.out.println(u.getName()));
数组和集合也容易踩坑
比如定义了一个List但忘了初始化:
List<String> items;
items.add("apple"); // 空指针!
正确写法应该是:
List<String> items = new ArrayList<>();
items.add("apple");
调试小技巧
在关键变量使用前打日志,或者用IDE的调试模式一步步走,看看哪个变量是null。别等到调用方法时才暴露问题,提前拦截更省事。
空指针不是洪水猛兽,多数时候是逻辑疏忽。养成写完一段代码就想想“这个会不会是null”的习惯,能少掉很多头发。