网站登录界面模板html,龙岩,网络服务器配置与管理试题,深圳做营销网站在所有的RuntimeException异常中#xff0c;Java程序员最熟悉的恐怕就是NullPointerException了。
NullPointerException即空指针异常#xff0c;俗称NPE。如果一个对象为null#xff0c;调用其方法或访问其字段就会产生NullPointerException#xff0c;这个异常通常是由J…在所有的RuntimeException异常中Java程序员最熟悉的恐怕就是NullPointerException了。
NullPointerException即空指针异常俗称NPE。如果一个对象为null调用其方法或访问其字段就会产生NullPointerException这个异常通常是由JVM抛出的例如
public class Main {public static void main(String[] args) {String s null;System.out.println(s.toLowerCase());}
} 指针这个概念实际上源自C语言Java语言中并无指针。我们定义的变量实际上是引用Null Pointer更确切地说是Null Reference不过两者区别不大。
处理NullPointerException
如果遇到NullPointerException我们应该如何处理首先必须明确NullPointerException是一种代码逻辑错误遇到NullPointerException遵循原则是早暴露早修复严禁使用catch来隐藏这种编码错误
// 错误示例: 捕获NullPointerException
try {transferMoney(from, to, amount);
} catch (NullPointerException e) {
}好的编码习惯可以极大地降低NullPointerException的产生例如
成员变量在定义时初始化
public class Person {private String name ;
}使用空字符串而不是默认的null可避免很多NullPointerException编写业务逻辑时用空字符串表示未填写比null安全得多。
返回空字符串、空数组而不是null
public String[] readLinesFromFile(String file) {if (getFileSize(file) 0) {// 返回空数组而不是null:return new String[0];}...
}这样可以使得调用方无需检查结果是否为null。
如果调用方一定要根据null判断比如返回null表示文件不存在那么考虑返回OptionalT
public OptionalString readFromFile(String file) {if (!fileExist(file)) {return Optional.empty();}...
}这样调用方必须通过Optional.isPresent()判断是否有结果。
定位NullPointerException
如果产生了NullPointerException例如调用a.b.c.x()时产生了NullPointerException原因可能是
a是nulla.b是nulla.b.c是null
确定到底是哪个对象是null以前只能打印这样的日志
System.out.println(a);
System.out.println(a.b);
System.out.println(a.b.c);从Java 14开始如果产生了NullPointerExceptionJVM可以给出详细的信息告诉我们null对象到底是谁。我们来看例子
public class Main {public static void main(String[] args) {Person p new Person();System.out.println(p.address.city.toLowerCase());}
}class Person {String[] name new String[2];Address address new Address();
}class Address {String city;String street;String zipcode;
}
可以在NullPointerException的详细信息中看到类似... because local1.address.city is null意思是city字段为null这样我们就能快速定位问题所在。
这种增强的NullPointerException详细信息是Java 14新增的功能但默认是关闭的我们可以给JVM添加一个-XX:ShowCodeDetailsInExceptionMessages参数启用它
java -XX:ShowCodeDetailsInExceptionMessages Main.javaNullPointerException是Java代码常见的逻辑错误应当早暴露早修复可以启用Java 14的增强异常信息来查看NullPointerException的详细错误信息。