赞
踩
Java空指针异常(NullPointerException):空指针异常属于运行时异常(RuntimeException),即:编译会通过,但运行时会报异常。当你调用某个实例对象的方法时,如果该实例对象是个空引用,没有指向任何类,就会报空针。
日常开发中报空指针异常的常见场景:
场景1:调用某个对象的方法,但是实例化时,给该对象赋予了一个空引用,即该对象指向了空的引用,例如toString()
场景2:给引用变量赋值为null,自动拆箱时导致空指针异常
场景3:字符串常量未初始化,比较时顺序不当导致空指针异常,交换顺序即可避免报空指针异常
场景4:接口类型的对象没有使用具体的类进行初始化导致空指针异常
场景5:ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null,强行 put null 的 Key 或 Value 会出现空指针异常
import sun.applet.Main; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.ConcurrentHashMap; /** * @Description 测试报空指针异常的常用场景 * 总结与技巧:在遇到空指针错误时,要重点关注报错发生的所在行,通过空指针异常产生的两条主要原因(变量未初始化和对象为空)诊断具体的错误,主要注意以下几点: * 检查使用之前是否进行了初始化; * 尽量避免在函数中返回 null 值,如果必须要返回 null 值,一定要给出详细的注释信息; * 外部传值时,一定要及时的进行判空处理(除非有明确的说明可以为 null ); * 使用 equals() 方法时,要遵循 "常量在前变量在后"的原则; * 使用 valueOf() 替换toString(); * 通过返回空的 Collection 或 Array 来替代 null 值; * 使用注解 @NotNull、@Nullable; * 定义合理的默认值,遵守约定(比如设置默认值,设置是否允许为空,从而形成合理的约定); * 从数据库取数据,可以约束哪些字段不能为空。 * Java中的8种数据类型,变量的值可以有其默认值,假如没有对其正常赋值,Java虚拟机是不能正确编译通过的,所以使用基本数据类型一般是不会引起空指针异常的。也就是说,在实际开发中大多数的空指针异常主要与对象的操作相关。 **/ public class NullPointerExceptionTest { public static void main(String[] args) { //场景1:调用某个对象的方法,但是实例化时,给该对象赋予了一个空引用,即该对象指向了空的引用,例如toString() // AppendTest appendTest = null; // System.out.println(appendTest.toString()); //场景2:给引用变量赋值为null,自动拆箱时导致空指针异常 // Integer str = null; // int num = str; // System.out.println(num); //场景3:字符串常量未初始化,比较时顺序不当导致空指针异常,交换顺序即可避免报空指针异常 // String str = null; // //不推荐把变量放常量前,当变量为空时,运行时报空指针,此处,把常量放变量前,即可避免报空指针 // if (str.equals("zhangsan")){ // System.out.println("相等"); // }else{ // System.out.println("不相等"); // } //场景4:接口类型的对象没有使用具体的类进行初始化导致空指针异常 // List list1; // List list2 = null; // List list3 = new ArrayList(); // System.out.println("list1未被初始化,不能直接使用"); // System.out.println("list2会报空指针" + list2.isEmpty()); // System.out.println("list3正常运行" + list3.isEmpty()); //场景5:ConcurrentHashMap 这样的容器不支持 Key 和 Value 为 null,强行 put null 的 Key 或 Value 会出现空指针异常 //HashMap可以存入null,而ConcurrentHashMap不可以 // HashMap<String, Object> map1 = new HashMap<>(); // map1.put(null,null); ConcurrentHashMap map2 = new ConcurrentHashMap(); map2.put(null,null); System.out.println(map2); } }
总结与技巧:在遇到空指针错误时,要重点关注报错发生的所在行,通过空指针异常产生的两条主要原因(变量未初始化和对象为空)诊断具体的错误,主要注意以下几点:
参考链接:https://blog.csdn.net/yaxuan88521/article/details/125079485
https://blog.csdn.net/x1113162924/article/details/126040562
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。