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

编译没错,执行的时候报错Exception in thread "main" java.lang.NullPointerException为什么?

package com.imooc.collection;
import java.util.List;
import java.util.ArrayList;;
//测试泛型
public class TestGeneric {

	//带有泛型Course的list
	public List<Course> courses ;
	
	//编写构造器,在构造器中初始化courses属性
	public void testGeneric(){
	this.courses = new ArrayList<Course>();
	}
	
	/**
	 * 测试添加
	 * @param args
	 */
	public void testAdd(){
		Course cr1 = new Course("1","大学英语");
		courses.add(cr1);
		//在泛型集合中,不能添加规定类型以外的类型,否则会报错
		//courses.add("在list中尝试添加字符串。");
		Course cr2 = new Course ("2","大学数学");
		courses.add(cr2);
	}
	
	/**
	 * 测试循环遍历
	 * @param args
	 */
	public void testForEach(){
		System.out.println("有如下课程待选(通过foreach语句)");
		//courses中存的对象是Course,这里不用先取出object类型对象再转换(泛型好处)
		for(Course cr : courses){
			System.out.println(cr.id+cr.name);
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TestGeneric tg = new TestGeneric();
		tg.testAdd();
		tg.testForEach();
	}

}

报错:
Exception in thread "main" java.lang.NullPointerException
at com.imooc.collection.TestGeneric.testAdd(TestGeneric.java:21)
at com.imooc.collection.TestGeneric.main(TestGeneric.java:43)


正在回答

3 回答

第8行:public List<Course> courses ;

courses未初始化,默认值为null,用null调用方法就会出现NullPointerException(空指针异常),初始化对象就好了

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

慕粉3168680 提问者

谢谢~~
2016-10-05 回复 有任何疑惑可以回复我~
#2

慕粉3168680 提问者

谢谢~~
2016-10-05 回复 有任何疑惑可以回复我~
#3

慕粉3586557

我的也是,这不是和老师给的一样吗?怎么复制了老师的就行,求指点
2017-02-08 回复 有任何疑惑可以回复我~
#4

实时编程

这个地方 是构造方法 写错了 构造方法应该是这个样子的 public TestGeneric(){ this.courses = new ArrayList<Course>(); } 这么改就可以
2017-12-26 回复 有任何疑惑可以回复我~
查看1条回复

 //编写构造器,在构造器中初始化courses属性

    public void testGeneric(){

    this.courses = new ArrayList<Course>();

    }

第一错误出现在这里 这个地方 应该是个构造器。题目中这么写只是个普通方法。

第二去掉void 也没有用  。去掉void 程序编译都通不过

正确的写法应该是 构造器名次跟类名 完全一致  并且大小写也要完全一致

应该是没有void 并且构造器名为 TestGeneric  这样实例化的时候就会执行构造器 了

  public  TestGeneric(){

    this.courses = new ArrayList<Course>();

    }


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

public void testGeneric(){

    this.courses = new ArrayList<Course>();

    }

void返回类型为空,所以输入ID后返回就为空;应该把void去掉     


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

慕粉3168680 提问者

谢谢~~
2016-10-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

编译没错,执行的时候报错Exception in thread "main" java.lang.NullPointerException为什么?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号