初学者求教:java.lan.NullPointerException是什么?调用getInt时如何修复?
理解并修复调用
getInt时的java.lang.NullPointerException 嘿,作为编程新手碰到java.lang.NullPointerException(大伙一般简称NPE)太正常了——我刚学Java的时候也踩过这个坑无数次!先给你掰扯清楚这到底是啥,再针对性说调用getInt类方法时怎么搞定它。
什么是java.lang.NullPointerException?
简单来说,就是你尝试去调用一个null对象的方法,或者访问它的属性了。null在Java里就表示“这个变量根本没指向任何实际存在的对象”,就像你手里攥着个空信封,却非要从里面掏东西,这不就直接“炸锅”了嘛。
举个最直白的例子:你有个Integer类型的变量num,如果它是null,你直接调用num.intValue(),妥妥触发NPE。
调用getInt类方法时为啥会出NPE?怎么修复?
这里的getInt得分几种常见场景来看,我给你逐个拆解:
场景1:从集合(比如Map)取到null后直接拆箱/调用方法
比如你写了这样的代码:
Map<String, Integer> scoreMap = new HashMap<>(); // 假设你压根没往map里存"Alice"这个键 int score = scoreMap.get("Alice").intValue(); // 这里直接炸NPE!
原因很简单:scoreMap.get("Alice")返回的是null,你却想调用它的intValue()方法——空对象哪来的方法给你调用?甚至连自动拆箱都会炸:
int score = scoreMap.get("Alice"); // 同样触发NPE,因为null没法自动转成int
修复方法:
- 先检查取值是否为null,再处理:
Integer scoreObj = scoreMap.get("Alice"); int score; if (scoreObj != null) { score = scoreObj; } else { // 给个默认值,比如0,或者抛个自定义提示 score = 0; }
- 用Java 8+的
Optional来优雅处理(推荐!):
int score = Optional.ofNullable(scoreMap.get("Alice")) .orElse(0); // 取不到值就用0当默认值
场景2:调用某个对象的getInt方法,但对象本身是null
比如你自定义了一个Student类:
class Student { private int age; // 这个getAge就属于类似getInt的方法 public int getAge() { return age; } }
然后你写了这段代码:
Student student = null; int age = student.getAge(); // 直接炸NPE!
问题出在student是null——你连Student对象都没创建,怎么调用它的getAge方法?就像你喊一个不存在的人帮你拿东西,肯定没人理你啊。
修复方法:
- 确保调用方法前,对象已经被正确初始化:
Student student = new Student(); // 先创建实际的Student对象 int age = student.getAge(); // 现在就没问题了
- 加个null检查,避免意外情况:
if (student != null) { int age = student.getAge(); } else { // 处理对象为null的情况,比如提示用户,或者直接初始化对象 }
场景3:JDBC操作中ResultSet为null时调用getInt
如果你用JDBC操作数据库,要是ResultSet本身是null,调用getInt也会炸NPE:
ResultSet rs = null; int id = rs.getInt("id"); // NPE警告!
修复方法:
确保ResultSet已经通过查询正确获取,并且先检查有没有数据:
Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT id FROM users WHERE id=1"); if (rs.next()) { // 先确认结果集里有数据 int id = rs.getInt("id"); }
总结一下避免NPE的核心思路
- 调用方法/访问属性前,先确认对象不是null——这是最直接有效的办法。
- 对于可能返回null的方法(比如集合的
get),用Optional或者默认值兜底,别直接拆箱或调用方法。 - 养成好习惯:初始化变量时尽量别让它为null,能用空集合、空字符串代替null的就别用null。
内容的提问来源于stack exchange,提问作者Damoune Abdellatif
相关产品推荐
相关产品推荐

