异常名:
Exception in thread “main” java.lang.NullPointerException
at com.ActionEvent.Girl.addEmotionListener(Girl.java:22)
at com.ActionEvent.EmotionTest.main(EmotionTest.java:45)
代码段如下:
在构建集合ArrayList时创建集合对象的地方可以有两个地方,但是各自有所区别:
在声明的同时便为它创建集合对象:这种方法推荐使用,不容易出错,以免的在后面对集合操作如添加元素时发生上述异常;
在构造器中为其创建对象,我们都知道,构造器是创建对象的时候必须调用的方法,
但是要注意一点:
在执行如下代码的情况下:
//构建女孩对象
Girl mr = new Girl(“马蓉”);
此时如果执行这个程序便会有上述异常,因为在创建对象时默认调用有参数的构造器,并没有调用无参构造器(只有在子父类关系时创建子类对象才会去自动执行父类的无参构造方法)。
从而ArrayList集合对象也就只是作了声明,虽然在编译时不会报错,但是程序执行过程中出现NullPointException异常;
相反地,如果在声明的同时便为其创建对象或者在有参构造器中创建对象则会成功!
//事件源
public class Girl {
private String name;
private List<EmotionListener> els; //= new ArrayList<EmotionListener>();//列表
public Girl(){
//els = new ArrayList<EmotionListener>();
}
public Girl(String name){
//els = new ArrayList<EmotionListener>();n
this.setName(name);
}
public void addEmotionListener(EmotionListener e){
els.add(e);
}
}
构造器之间的调用:
创建子类对象时,程序总是先去执行父类中哪个与之相关联的构造器执行,然后才执行自身的哪个构造器;
当子类中有无参构造器时,父类中必须有无参构造器;