为了账号安全,请及时绑定邮箱和手机立即绑定

各位大神,我已经知道错在构造方法中多写了一个Scanner,相当于有定义了一个局部变量,我想这样写为什么错了呢,

各位大神,15:40左右老师在讲解自行输入课程名称查找是否重复的时候,

我已经知道错在构造方法中在console前面多写了一个Scanner,相当于又定义了一个局部变量,我想问这样写为什么错了呢???

当我在SetTest类中创建了成员变量:private修饰的Scanner类型的属性console

同时,我在SetTest有参构造方法中又定义了一个局部变量:Scanner类型的console

会出现下面的异常情况:Exception in thread "main" java.lang.NullPointerException,第三个截图.

https://img1.sycdn.imooc.com//5c84d371000166f809510438.jpg

https://img1.sycdn.imooc.com//5c84d3760001f89709070232.jpg

https://img1.sycdn.imooc.com//5c84d37b0001116910450263.jpg


正在回答

4 回答

我第一个的静态代码块写的有问题 换成构造代码块吧

https://img1.sycdn.imooc.com//5c863c6c00012b5704700140.jpg

0 回复 有任何疑惑可以回复我~
#1

Levi_u

我擦 又截错了 这个不用写static
2019-03-11 回复 有任何疑惑可以回复我~

把第五行的Scanner去掉就可以了

0 回复 有任何疑惑可以回复我~

就这几行代码他就报运行错误了,真不知道为啥

https://img1.sycdn.imooc.com//5c862c46000157a907870367.jpg

https://img1.sycdn.imooc.com//5c862c460001ad5e07990182.jpg


0 回复 有任何疑惑可以回复我~
#1

Levi_u

因为你第5行这个console只是局部变量,你并未给成员变量的console(即第三行的那个)赋值,所以你下面第9行调用next方法就是空指针异常,因为你这个成员变量并未初始化值
2019-03-11 回复 有任何疑惑可以回复我~
#2

霸气小肆毛 提问者 回复 Levi_u

好的,感谢大佬
2019-03-11 回复 有任何疑惑可以回复我~
#3

Levi_u 回复 霸气小肆毛 提问者

大佬可不敢当 就是个小渣渣而已
2019-03-11 回复 有任何疑惑可以回复我~

首先你问题不在你说的那块代码里,而且你那里这样写是没问题的,但没必要,因为看你的注释大概是想说每次只创建出一个Scanner对象,还把Scanner抽出来了一个成员变量,但是实际上每次调用构造依旧是在构造里new的一个Scanner,那么你定义的这个就没有用到啊 这里如果只想初始化一次,直接写到静态代码块就可以了,这样只会跟着类加载的时候给初始化一次

static {
this.console = new Scanner(System.in);
}

接着说你下面的问题,首先是空指针异常,那么肯定是对象是空的,控制台写的很明白了120行,你这里没截出来,大概是coursesToSelect这个对象是空的,空的调用contains方法肯定就出现空指针异常,然后继续看上面一个报错106行,testListContains方法,所以问题来源应该就是这个方法里返回的时候,对象返回了null,打个断点看一下应该就可以了

0 回复 有任何疑惑可以回复我~
#1

霸气小肆毛 提问者

非常感谢大佬的回答,但是我还是有点迷糊,我把我想问的又重新在您回答的下面给写了一下,请大佬您再看一下呗,菜鸟非常感谢。
2019-03-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

各位大神,我已经知道错在构造方法中多写了一个Scanner,相当于有定义了一个局部变量,我想这样写为什么错了呢,

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信