目 录CONTENT

文章目录

发现了一个关于对象的小bug

若离风
2022-07-25 / 0 评论 / 0 点赞 / 76 阅读 / 682 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

意外的bug

今天在写一个项目的时候突然出现了一个我意想不到的错误,不过还好我是一个功能写出来了就测试一个功能,如果是整个项目都写出来了可能就不好弄了,先来看看这个错误吧

Snipaste_2022-07-25_19-23-27

我们可以很清晰的看出是500,服务器内部错误,发现是我的一个调用方法返回值为null导致的,然后我就看了一下这个方法

if(byUser.getIsDelete() == 1){
   throw new UsernameNotFoundException("用户名或密码输入错误");
}

很简单的一个方法,用来判断用户是否被删除的,我很好奇,为啥返回为null就会报错呢,不应该比较之后直接 就执行下一步吗?我debug了一下,发现这个数据真的为null

Snipaste_2022-07-25_19-20-28

真奇怪,难道这个字段的默认值不是null?,我看了一下这个字段,发现这个字段是java的包装类Integer,一个对象类型,难道不应该是null吗?

接下来我测试了一波

@SpringBootTest
public class OtherError {
    User user;
    Integer e;
    static int c;
    @Test
   public  void testIntegerValue(){
//        Integer a;
        Integer b = 10;
        int d = 20;
//        System.out.println("a="+a);
        System.out.println("b="+b);
        System.out.println("c="+c);
        System.out.println("d="+d);
        System.out.println("e="+e);
        System.out.println(user);
   }
}

发现定义在方法体内部的对象是不能不初始化的,不初始化的后果就是报错,像我刚才那样,不过我刚才那个编译器没有检测出来,定义在类中的对象就可以不初始化,默认值为0,

Snipaste_2022-07-25_19-37-42

查看了一下数据库,这个值确实没有赋值,而我刚才那个方法也是在方法体里面调的,所以才会出现这样的情况,具体为什么不初始化的对象数据不能在方法里面被使用,我猜应该是和static有关,不过也只是猜测,有知道的小伙伴评论一波,终究是基础不牢固啊,得去复习复习了

后面我改了一下代码,让每一个值都附上了初始化的值,这样再一次请求就成功啦!

Snipaste_2022-07-25_19-52-51

通过这个例子,我总结了

  1. 不能直接使用未初始化的对象的任何属性,前提是这个对象是在方法体里面声明的
  2. 写代码要及时测试,不要等全部写完了再测试,这样你可能会…
  3. java基础还是不牢固,得复习
0

评论区