当前位置:   article > 正文

Java空指针异常:NullPointerException_空指针,位置为java.util.date.getmillisof(date.java:958)

空指针,位置为java.util.date.getmillisof(date.java:958)

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);

    }
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

在这里插入图片描述

总结与技巧:在遇到空指针错误时,要重点关注报错发生的所在行,通过空指针异常产生的两条主要原因(变量未初始化和对象为空)诊断具体的错误,主要注意以下几点:

  • 检查使用之前是否进行了初始化;
  • 尽量避免在函数中返回 null 值,如果必须要返回 null 值,一定要给出详细的注释信息;
  • 外部传值时,一定要及时的进行判空处理(除非有明确的说明可以为 null );
  • 使用 equals() 方法时,要遵循 "常量在前变量在后"的原则;
  • 使用 valueOf() 替换toString();
  • 通过返回空的 Collection 或 Array 来替代 null 值;
  • 使用注解 @NotNull、@Nullable;
  • 定义合理的默认值,遵守约定(比如设置默认值,设置是否允许为空,从而形成合理的约定);
  • 从数据库取数据,可以约束哪些字段不能为空。
  • Java中的8种数据类型,变量的值可以有其默认值,假如没有对其正常赋值,Java虚拟机是不能正确编译通过的,所以使用基本数据类型一般是不会引起空指针异常的。也就是说,在实际开发中大多数的空指针异常主要与对象的操作相关。

参考链接:https://blog.csdn.net/yaxuan88521/article/details/125079485

https://blog.csdn.net/x1113162924/article/details/126040562

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/320771?site
推荐阅读
相关标签
  

闽ICP备14008679号