Java空指针异常NullPointerException怎么排查含可运行示例本文整理Java 空指针异常NPE的排查思路与可运行示例适合课程设计、实验调试时查阅。写 Java 作业时最怕啥十有八九是看到那行红字NullPointerException简称 NPE。别慌这玩意儿我大一也被折磨过后来发现只要知道套路排查起来其实不难。今天手把手带你走一遍。排查思路4 步走看报错行号控制台会告诉你at YourClass.java:15直接定位到第 15 行。别从头读代码先看那一行。检查对象是否初始化NPE 的本质是调用了一个null对象的方法或属性。常见场景变量只声明没赋值、方法返回了null、从数组或集合里取到了null。用打印或断点确认在可疑行前加System.out.println(变量)看哪个变量是null。IDEA 的话可以双击行号打红点Debug 模式运行鼠标悬停看变量值。查链式调用比如obj.getA().getB().toString()只要某一个环节是null整条链就炸。建议拆开写或者加判空。示例代码演示下面用一个学生成绩查询的例子模拟最常见的几种 NPE 情况。importjava.util.*;publicclassNullPointerDemo{// 模拟一个可能返回 null 的方法publicstaticStringgetStudentName(MapString,Stringmap,Stringid){returnmap.get(id);// 如果 id 不存在返回 null}publicstaticvoidmain(String[]args){// 场景1对象未初始化Stringnamenull;// System.out.println(name.length()); // 这里会 NPE先注释掉// 场景2从 Map 取 null 后调用方法MapString,StringstudentMapnewHashMap();studentMap.put(001,小明);StringresultgetStudentName(studentMap,002);// 002 不存在// System.out.println(result.toUpperCase()); // 这里会 NPE因为 result 是 null// 场景3数组或集合里的 nullString[]studentsnewString[3];students[0]小红;students[1]null;// 故意留一个 nullstudents[2]小刚;for(Strings:students){// System.out.println(s.length()); // 遍历到 students[1] 时 NPE}// 场景4链式调用ListStringlistnull;// System.out.println(list.size()); // 直接 NPE// 正确的处理方式加判空StringsafeResultgetStudentName(studentMap,002);if(safeResult!null){System.out.println(safeResult.toUpperCase());}else{System.out.println(学生不存在);}// 用 Optional 更优雅Java 8OptionalStringoptionalResultOptional.ofNullable(getStudentName(studentMap,002));optionalResult.ifPresentOrElse(s-System.out.println(s.toUpperCase()),()-System.out.println(学生不存在));// 使用三元运算符StringfinalName(safeResult!null)?safeResult:默认值;System.out.println(最终名字finalName);}}常见踩坑点方法返回值没判空比如findUserById(id)返回null你直接.getName()就炸。JSON 解析从接口拿数据某个字段是null你直接getString(key).length()。数据库查询resultSet.getString(col)可能为null尤其联合查询时。构造器里漏初始化成员变量声明了但没在构造方法里赋值后续方法一调用就 NPE。自动拆箱Integer为null时参与运算也会触发 NPE作业里很常见。本地怎么跑把上面代码保存为NullPointerDemo.java。命令行执行javac NullPointerDemo.java java NullPointerDemo。逐行取消注释带 NPE 的System.out.println观察控制台行号变化。对照「排查思路」四步练习从报错行反推哪个变量是null。我的建议写代码时养成习惯谁调用谁负责判空。方法里如果可能返回null最好在注释里说明或者用Nullable注解标记。实在嫌麻烦就用Objects.requireNonNull()主动抛出异常这样报错信息更明确。