关于java内部类的问题

2025-01-21 15:26:55
推荐回答(1个)
回答1:

自己写的死循环,含泪你也得看完。
首先分析下run。
public void run() {
while (eventList.size() > 0) {
for (Event e : new ArrayList(eventList)) {
System.out.println(e);
e.action();
eventList.remove(e);
}
}
}
这个双层的循环,你的意思大概是 执行删除这个event。但你这个for (Event e ...这个可是在创建对象。相当于new。
再来看event,里面有俩方法,还是被类Bell 继承重写了。那自然不停的执行bell里的action,
abstract class Event {
public Event() {
}
public void action() {
}
}

再看action ,new个自己进去。new在堆中新建引用。
public void action() {
addEvent(new Bell());
}

再回到你的run方法,while下。for里面。你删一个加一个删一个加一个...........无休止。另外for (Event e : new ArrayList(eventList)) {你这个 还new ArrayList 干嘛。直接这么写 for (Event e :eventList) { 不好使吗?