NullPointerException即空指针异常,俗称NPE。 如果对象为null,则在调用方法或访问该字段时将生成NullPointerException。 此异常通常由JVM抛出,如下所示:
公共类主{ publicstaticvoidmain (字符串[ ] args ) { String s=null; system.out.println (s.to lower case ); }指针这一概念实际上来源于c语言,Java语言中没有指针。 我们定义的变量实际上是引用,空指针更准确地说是空参考,但两者不太区分。
如果遇到处理NullPointerException的NullPointerException,该怎么办? 首先,NullPointerException是一个代码逻辑错误,遇到NullPointerException,遵循原则是早期暴露、早期修复,严禁使用catch隐藏这个编码错误
//错误示例:捕获空输入外围设备{传输监视器(从、到、自动); }空点编码(catch )良好的编码习惯大大减少了空点编码的生成,包括:
成员变量在定义时初始化。
公共类人员{私有属性名称=' '; }空字符串““可以避免许多NullPointerException,而不是默认的null。 创建业务逻辑时,使用空字符串“”表示未填写比null安全得多。
空字符串'',返回空数组而不是空数组:
public string [ ] readlinesfromfile (string file ) if ) getfilesize (file==0) )//返回空数组,而不是空: return new string (返回新字符串) 0
如果调用方必须基于null进行判断,例如,如果返回null表示文件不存在,则考虑返回Optional T。
publicoptionalstringreadfromfile (字符串文件) if (! 文件退出(文件) { return Optional.empty; } .这样,调用方必须在Optional.isPresent ()中确定是否有结果。
如果生成了位置nullpointerexceptionnullpointerexception (例如,a.b.c.x ) ),则假设在调用时生成了nullpointerexception。 原因如下。
a为空; a.b为空; a.b.c为空; 从Java 14开始,如果发生NullPointerException,JVM将详细告诉您空对象是谁。 请看一个例子:
public class main { publicstaticvoidmain (字符串[ ] args ) { Person p=new Person ); 系统. out.println (p.address.city.to lower case () ); } class person { string [ ] name=new string [2]; 地址地址=new地址(; }class Address { String city; 字符串条; 字符串zip代码; 在NullPointerException的详细信息中…可以看到类似because“. address.city”null的内容。 这意味着city字段为null,从而可以快速确定问题。
此增强的NullPointerException详细信息是Java 14的新功能,但默认情况下处于禁用状态。 可以将- xx : showcodedetailsinexceptionmessages参数添加到JVM中以启用。
Java-xx 3360 showcodedetailsinexceptionmessagesmain.Java总结NullPointerException是Java代码中常见的逻辑错误,必须快暴露快修复
可以启用Java 14扩展异常信息以显示NullPointerException的详细错误消息。