精华内容
下载资源
问答
  • 空指针异常原因分析
    千次阅读
    2021-03-22 10:35:29

    定义

    首先介绍一下空指针异常的定义:
    空指针异常(NullPointerException):空指针异常是指java中的异常类,当应用程序试图在需要对象的地方使用 null 时,就会抛出该异常.

    简而言之,就是当你要使用一个对象时,结果对象并无内容只有null值,那就会抛出空指针异常.(下文简称NPE)

    可能原因

    那么当程序中出现了空指针异常,我们该如何去找到并排除异常呢?

    出现NPE时,我们首先需要根据抛出的异常信息,去找到出现异常的行号!
    之后我们需要去检查三个方面:

    1.检查出现NPE的行是否有对象调用了方法

    2.如果有对象调用方法的话,检查调用方法的对象是什么时候进行赋值的,现在是否还有值

    3.如果该对象是由spring容器进行依赖注入(DI)进行复制的,那要检查该对象的引用是否使用了spring框架的特定注解(@Autowired等)来描述,对象引用的属性所在的类是否交给了spring框架管理(@springboottest等注解)

    通过这三点连续的检查,应该可以锁定大部分空指针异常出现的原因,找到原因后,修改就很简单了,根据所需要求修改程序即可

    更多相关内容
  • 日志级别导致Dubbo出现空指针异常,这个是在查看源码排查问题之后,反推得到的结论。 文章所用Dubbo版本2.6.3 问题复现 Consumer A服务依赖Provider B服务。 Consumer A先启动了,此时注册中心无B服务实现,而后...
  • 空指针异常什么意思?        这里我们首先要明确什么是指针,指针指的是什么? 指针:我所理解的指针指的是java程序中的对象 那什么是空?      &...

    空指针异常是什么意思?

           这里我们首先要明确什么是指针,指针指的是什么?

    指针:指针存放的是内存地址

    那什么是空?
           举个例子:小明过生日,小华送给了小明一个“礼物”,这个“礼物”只有一个外面的包装但是里面什么都没有,这个礼物就是"",而空则是小华压根没有给小华准备礼物,这个就是null。

    空指针:所以当指针不指向任何内存地址时,就叫做空指针,例如:int[] array = null

    那么什么叫做空指针异常呢?
           就是一个指针不指向任何内存地址,但是你还调用他了,例如:

    int[] array = null; 
    System.out.println(array[0]);
    

    这个时候原本array数组是个空指针,没有创建新的对象,在调用这个数组的时候就会产生空指针异常的错误!
    程序运行会显示Exception in thread "main" java.lang.NullPointerException的异常提示

    为什么会产生空指针异常呢?

    这里我们用上面举的例子进行说明,int[] array = null在内存中的栈内存中创建了一个叫做array的变量,而堆内存中并没有开辟int类型的数组空间,所以在栈内存中的这个array变量没有存放任何内存地址,由此我们可以理解为什么会产生空指针异常,调用没有的东西显然时不可以的。

    展开全文
  • public class Student { private int on; private String name; private int age; private int java; private int c; private int html; private int sql; private int sum; private int avg;...
  • 主要介绍了Java中避免空指针异常的方法,本文讨论Optional类型、Objects类等技术,需要的朋友可以参考下
  • Optional可以让你的代码具有可读性,且避免出现空指针异常。下面这篇文章主要给大家介绍了关于利用Java8 Optional如何避免空指针异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
  • 今天小编就大家分享一篇关于实例化JFileChooser对象报空指针异常问题的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 下面小编就大家带来一篇浅谈java异常处理之空指针异常。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java中的空指针异常

    千次阅读 2021-11-25 14:56:31
    Java中的空指针异常一、什么空指针异常?1.1 异常的分类1.2 空指针异常引入1.3 空指针异常说明二、Java中的null三、空指针产生的常见情况及避免办法3.1 字符串常量未初始化,比较时导致空指针异常3.2 接口类型的...

    一、什么是空指针异常?

    1.1 异常的分类

    在这里插入图片描述
    NullPointerException是RuntimeException的一个子类,这是运行时异常,在编译时期不会触发。

    1.2 空指针异常引入

    Java是没有指针的,所以我们常说"Java 指针"就是指"Java 的引用"。空指针就是空引用,Java空指针异常就是引用本身为空,但却调用了方法,这个时候就会出现空指针异常。

    成员变量和方法是属于对象的(除去静态的),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些成员变量和方法。

    而对于空指针来说,它是不指向任何对象的,也就是没有所谓的成员变量和方法,这个时候去调用某些属性和方法时,就一定会出现空指针异常。

    1.3 空指针异常说明

    /**
     * @author QHJ
     * @date 2021/11/25  14:42
     * @description:
     */
    public class NullPointTest {
        private int a = 1;
        private int b = 2;
        public static void main(String[] args) {
            NullPointTest nullPointTest1 = new NullPointTest();
            System.out.println(nullPointTest1.a);
            System.out.println(nullPointTest1.sum());
    
            NullPointTest nullPointTest2 = null;
            System.out.println(nullPointTest2.b);
            System.out.println(nullPointTest2.sum());
    
        }
        public String sum(){
            return "这是sum()方法...";
        }
    }
    

    在这里插入图片描述
    说明:对象 nullPointTest1 是通过默认的无参构造方法实例出来的 NullPointTest 对象;对象 nullPointTest2 只是声明了一个空对象,并没有指向实际的对象,它没有响应的成员变量和方法,当调用不属于它的成员变量和方法时,引发空指针异常。

    二、Java中的null

    null是Java中一个很重要的概念,null 设计的初衷是为了表示一些缺失的东西,比如缺失的用户、资源或一些其他东西。

    • 首先,null是关键字,像public、static、final。它是大小写敏感的,你不能将 null 写成 Null 或 NULL,编译器将不能识别它们然后报错。

    • null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将 false 作为自己的默认值,Java中的任何引用变量都将 nul l作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你)。

    • null既不是对象也不是一种类型,它仅是一种特殊的值,你可以将其赋予任何引用类型,你也可以将 null 转化成任何类型。

    • null可以赋值给引用变量,但不能将null赋给基本类型变量。例如int、double、float、boolean。编译器将会报错。

      当直接将null赋值给基本类型,会出现编译错误。但是如果将null赋值给包装类object,然后将object赋给各自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。这是Java中的自动拆箱导致的。

    • 任何含有null值的包装类在Java拆箱生成基本数据类型时候都会抛出一个空指针异常。
      在这里插入图片描述

    • 如果使用了带有 null 值的引用类型变量,instanceof 操作将会返回 false。

      Integer iAmNull = null;
      if(iAmNull instanceof Integer){
          System.out.println("iAmNull is instance of Integer");
      }else{
          System.out.println("iAmNull is NOT an instance of Integer");
      }
      
      结果:iAmNull is NOT an instance of Integer
      
    • 不能调用非静态方法来使用一个值为 null 的引用类型变量。但是可以调用静态方法里值为 null 的引用类型变量,因为静态方法使用静态绑定,不会抛出空指针异常。
      在这里插入图片描述

    • 可以将 null 传递给方法使用,这时方法可以接收任何引用类型,例如public void print(Object obj)可以这样调用print(null)。从编译角度来看这是可以的,但结果完全取决于方法。null 安全的方法,如在这个例子中的 print() 方法,不会抛出空指针异常,只是优雅的退出。如果业务逻辑允许的话,推荐使用 null 安全的方法。
      在这里插入图片描述

    • 可以使用 = = 或者 != 操作来比较 null 值,但是不能使用其他算法或者逻辑操作,例如小于或者大于。在Java中 null == null 将返回true。

    三、空指针产生的常见情况及避免办法

    3.1 字符串常量未初始化,比较时导致空指针异常

    • 出现空指针

      String str = null;
      // 不推荐——把变量放在常量前,当变量为空时,运行时报空指针
      if (str.equals("zhangsan")){
          System.out.println("相等");
      }else{
          System.out.println("不相等");
      }
      

      在这里插入图片描述

    • 避免空指针

      String str = null;
      // 推荐——把常量放在变量前,运行时不会报错
      if ("zhangsan".equals(str)){
          System.out.println("相等");
      }else {
          System.out.println("不相等");
      }
      

      在这里插入图片描述

    3.2 接口类型的对象没有使用具体的类进行初始化导致空指针异常

    • 出现空指针

      // list1 没有使用具体的类进行初始化,在使用时会报错
      List list1;
      // list2 没有使用具体的类进行初始化,报空指针
      List list2 = null;
      System.out.println("不能直接使用list1...");
      System.out.println("list2:" + list2.isEmpty());
      

      在这里插入图片描述

    • 避免空指针

      List list3 = new ArrayList();
      System.out.println("list3:" + list3.isEmpty());
      

      在这里插入图片描述

    3.3 参数类型为包装类型,使用时自动拆箱导致空指针异常

    • 出现空指针

      Integer a = 1;
      Integer b = null;
      sum(a, b);
      
      
      public static String sum(Integer a, Integer b){
          System.out.println(a + b);
          return "这是sum()方法...";
      }
      

      在这里插入图片描述

      注意: null 值不能转换为基本数据类型!

    • 避免空指针

      Integer a = 1;
      Integer b = null;
      // 避免空指针——及时判空	
      if (a != null && b != null){
          sum(a, b);
      }else{
          System.out.println("参数不允许为空值!");
      }
      
      
      public static String sum(Integer a, Integer b){
          System.out.println(a + b);
          return "这是sum()方法...";
      }
      

      在这里插入图片描述

    3.4 对象为空,但未判空导致空指针异常

    • 出现空指针

      UserEntity userEntity = null;
      System.out.println(userEntity.getName() + "\t" +userEntity.getAge());
      

      在这里插入图片描述

    • 避免空指针

      UserEntity userEntity = null;
      if (userEntity != null){
          System.out.println(userEntity.getName() + "\t" +userEntity.getAge());
      }else {
          System.out.println("对象不能为空哦!");
      }
      

      在这里插入图片描述

    3.5 对key、value不能为null的容器put为null的key、value值导致空指针异常

    • 出现空指针

      Map<String, String> map = new Hashtable<>();
      map.put("name:", "张三");
      map.put("age:", "23");
      map.put("nick:", null);
      map.put("", "");
      System.out.println(map);
      

      在这里插入图片描述

    • 避免空指针

      Map<String, String> map = new HashMap<>();
      map.put("name:", "张三");
      map.put("age:", "23");
      map.put("nick:", null);
      map.put("", "");
      System.out.println(map);
      

      在这里插入图片描述

    3.6 方法或者远程服务返回的list不是空而是null,没有进行判空,就直接调用该list的方法导致空指针异常

    • 出现空指针

      // 假设是通过方法或远程调用获得的list
      List list = null;
      Stream stream = list.stream().filter(s -> s.equals("zhangsan"));
      System.out.println(stream);
      

      在这里插入图片描述

    • 避免空指针

      // 假设是通过方法或远程调用获得的list
      List list = null;
      if (list != null){
          Stream stream = list.stream().filter(s -> s.equals("zhangsan"));
          System.out.println(stream);
      }else {
          System.out.println("获取的集合list不能为空!");
      }
      

      在这里插入图片描述

    四、总结和技巧

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

    1. 检查使用之前是否进行了初始化
    2. 尽量避免在函数中返回 null 值,如果必须要返回 null 值,一定要给出详细的注释信息;
    3. 外部传值时,一定要及时的进行判空处理(除非有明确的说明可以为 null );
    4. 使用 equals() 方法时,要遵循 "常量在前变量在后"的原则;
    5. 使用 valueOf() 替换toString()
    6. 通过返回空的 Collection 或 Array 来替代 null 值;
    7. 使用注解 @NotNull、@Nullable;
    8. 定义合理的默认值,遵守约定(比如设置默认值,设置是否允许为空,从而形成合理的约定);
    9. 从数据库取数据,可以约束哪些字段不能为空。

    Java中的8种数据类型,变量的值可以有其默认值,假如没有对其正常赋值,Java虚拟机是不能正确编译通过的,所以使用基本数据类型一般是不会引起空指针异常的。也就是说,在实际开发中大多数的空指针异常主要与对象的操作相关。

    展开全文
  • 主要介绍了Java字符串比较方法equals的空指针异常的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 数据库和表都建好了,但是表中还没有写入数据,查询的时候出现空指针异常的错误。 异常类型:java.lang.NullPointerException 解决方案: 我用的解决方法是使用try、catch,例如下代码,但实际这样写是不规范的仅...

    数据库和表都建好了,但是表中还没有写入数据,查询的时候出现了空指针异常的错误。

    异常类型:java.lang.NullPointerException

    解决方案:

    我用的解决方法是使用try、catch,例如下代码,但实际这样写是不规范的仅供参考。因为我们通常要在catch语句块里做处理的,不能只是在控制台输出就不管了

    try{  
       hotelImageList = ihotelImgManager.query(hiqc);  
      }catch(Exception e){  
       System.out.println("无数据");  
      }  
    
    展开全文
  • 1、什么空指针异常当我们声明一个引用类型的变量,实际上是创建一个指向对象的指针。看一下下面代码,声明了一个原始类型(值类型)的int变量:int y;y=110;在上面代码中,声明的int型变量y,Java将它初始化为0。第...
  • 1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。 2.所谓的空指针,就是指针的内容空,比如上面的s,如果令它指向null,就是空指针。 3.所谓的空指针异常,就是一个...那么就产生空指针异常
  • 在进行Mybatis项目测试时,出现如下异常: 最终发现是由于工具类中的语句错误: 需要将以下语句修改 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 修改之后的...
  • 在做一个ssh项目的时候,写了一个工具类,在上面直接用@Autowired注解写了我用到的一个service方法,运行代码就一直报空指针,还以为是数据库关键字冲突,或者数据库连接问题,或者是我写的查询代码有问题,从 ...
  • Java应用中抛出的空指针异常是解决空指针的最好方式,也是写出能顺利工作的健壮程序的关键。 避免Java中的空指针异常的常用技巧(同时避免大量的非空检查): 1) 从已知的String对象中调用equals()和...
  • jsp连接数据库查询时出现空指针异常解决方法

    千次阅读 热门讨论 2020-07-29 17:15:30
    今天是非常不愉快的一天,本来跟着老师的课件写代码非常快乐,写完以运行来了空指针错误,我丢, 经过我多方百度、弄了三个多小时,终于解决了,不过办法有点治标不治本,初学jsp差不多就行了吧(安慰自己) 解决...
  • 什么时候报空指针异常

    千次阅读 2018-06-28 16:29:17
    空指针异常是我们开发当中经常遇到的一种程序异常情况,也是最简单的一种异常,这是一个运行级别异常,也就是在运行时才抛出该异常。空指针异常就是我们在对空对象进行的任何操作都会报空指针异常。因此当程序报该...
  • Java空指针异常和解决办法

    千次阅读 2022-04-19 20:37:21
    目录问题描述:尝试1:尝试2:使用Optional防止出现空指针异常引用 问题描述: public class Main20220419 { public static void main(String[] args) { String id = null; Item item = ItemService.getItemById...
  • java空指针异常解决Java programming language provides the Null Pointer Exception type in order to handle object creation related errors and misuse. In this tutorial, we will learn what is Null Pointer ...
  • java反射invoke调用方法报空指针异常

    万次阅读 2018-09-10 20:16:55
    最近做项目用到定时任务,在...在执行invoke方法的时候,一直报空指针异常,百度了一下午才找到解决方案。现在把解决方法分享给大家。   先看下代码: 首先是一个测试类: @Test public void test() { Str...
  • [求助]为什么会有空指针异常JDBC

    千次阅读 2021-03-14 00:25:46
    [求助]为什么会有空指针异常JDBC编写一个程序,根据用户输入的产品代码,在Product 表中搜索特定的产品,并显示产品的详细信息。该程序还应允许根据数量进行搜索并显示数量大于用户输入的值的产品详细信息。此外,还...
  • 空指针异常

    2020-08-24 11:57:11
    就是我们在对空对象进行的任何操作都会报空指针异常。  1.所谓的指针,就是java中的对象的引用。比如duString s;这个就是指针。  2.所谓的空指针,就是指针的内容空,比如上面的s,如果令它指向null,就是空指针。...
  • 空指针就是空引用,java空指针异常就是引用本身空,却调用了方法,这个时候就会出现空指针异常。可以理解,成员变量和方法是属于对象的(除去静态),在对象中才存在相对应的成员变量和方法,然后通过对象去调用这些...
  • Java空指针异常的几种情况

    千次阅读 2020-05-11 23:42:44
    Java空指针异常的几种情况 NullPointerException 说法一 NullPointerException由RuntimeException派生出来,是一个运行级别的异常。意思是说可能在运行的时候才被抛出,而且需要看这样的运行级别异常是否...
  • public static String pic_url =new String(); 这样定义就不会出现空指针异常 http://www.2cto.com/kf/201205/133951.html 转载于:https://www.cnblogs.com/Ringer/p/4032901.html
  • 空指针异常 NullPointException

    千次阅读 2019-08-26 23:00:11
    空指针异常,是运行时异常,及时编写代码时出现空指针异常,编译器(javac) 编译通过不报错,但是运行时Runtime阶段抛出NullPointException 一.空指针异常可能的情况 1.调用null对象的实例方法 (1).比如数据库...
  • Java 使用 long 出现空指针异常

    万次阅读 2017-07-11 18:08:53
    Java 使用 long 出现空指针异常 问题是这样的,比如下面这个方法定义: public Long getPersinalId(String token){ if (StringUtil.isBlank(token)) { return null; } Long id = null; id = ConstantDict...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,929
精华内容 62,771
关键字:

为什么会出现空指针异常