zoukankan      html  css  js  c++  java
  • JAVA中的NullPointerException异常

    今天我犯了一个经典的错误,使用一个值为null的对象。我仔细检查代码的逻辑,没有发现任何问题。理论上来说,不可能会创建值为null的对象。

    我找到程序报错行,添加如下语句

    if(shot != null && ...)

    此时我的整个程序可以正常运行,但并没有解决问题。我在创建Shot对象的代码处添加如下打印信息

    if(shot == null)
        System.out.println("warning");

    之后的确打印出了错误信息,然后我检查上面的代码,并添加最后一行代码打印信息。

     1 public void shotEnemy()
     2 {
     3     int x = this.x;
     4     int y = this.y;
     5     Shot shot = null;
     6 
     7     switch (this.direction)
     8     {
     9     case 0:
    10         shot = new Shot(x + 22, y - 11, direction, 1);
    11         break;
    12     case 1:
    13         shot = new Shot(x + 22, y + 55, direction, 1);
    14         break;
    15     case 2:
    16         shot = new Shot(x - 11, y + 22, direction, 1);
    17         break;
    18     case 3:
    19         shot = new Shot(x + 55, y + 22, direction, 1);
    20         break;
    21     default:
    22         break;
    23     }
    24     
    25     if (shot != null)
    26     {
    27         this.ss.add(shot); 
    28         Thread t = new Thread(shot);       //创建一个新线程
    29         t.start();
    30     }
    31     else
    32         System.out.println("warning" + this.direction);
    33 }

    之后发现direction值为4,而前面switch语句只在direction为0,1,2,3的情况下才会创建Shot实例。原来direction是我在前面用随机数生成的,而生成的随机数为0,1,2,3,4,误把4也生成了。

    之前还猜测是线程并发的问题,在把关键代码加了对象锁之后错误依旧,原来是在创建Shot时就给了一个null值。

  • 相关阅读:
    Scrum学习总结
    1330. 翻转子数组得到最大的数组值
    LeetCode 中等题解(4)
    LeetCode 中等题解(3)
    LeetCode 中等题解(2)
    LeetCode 中等题解(1)
    【暑期实习】计算机视觉岗问题整理-腾讯
    【暑期实习】计算机视觉岗问题整理-快手
    【暑期实习】计算机视觉岗问题整理-阿里
    Leetcode 1329. 将矩阵按对角线排序 题解
  • 原文地址:https://www.cnblogs.com/zqiang3/p/2887496.html
Copyright © 2011-2022 走看看