我想知道这段代码是否还会引发其他异常。
public class asd{
static private List<Integer> list = new ArrayList<>();
public static main(String[]args){
list.add(0);
list.add(1);
list.add(3);
for(Integer integer: list) {
if(integer% 2 == 0) {
list.remove(integer);
}
}
}
}
我知道ConcurrentModificationException。我只是想知道这段代码是否能够执行更多操作。非常感谢
答案 0 :(得分:2)
此特定代码不会引发异常,因为列表为空。
但是,如果列表中有NullPointerException
个值,则可以有null
个。 (取消装箱:https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)
答案 1 :(得分:0)
否,此外,由于list
中没有元素,因此不会执行循环,但是如果有元素,则只会抛出ConcurrentModificationException
。
答案 2 :(得分:0)
您编写的代码完全是确定性的:无论在哪里运行,它都可以执行相同的操作。因此,它抛出哪些异常?好吧,运行它。那就是它会抛出的东西,它不会抛出其他任何东西。就像其他人所说的那样,此代码尤其会抛出ConcurrentModificationException
,因为如果要内联删除,则需要使用迭代器remove()
方法(如果您要访问该方法,则无法访问该方法使用for( a : b)
样式,则必须改用Iterator<T> it = list.iterator(); while (it.next()) { .. }
。
如果您想深入了解Java应用程序中可能发生的异常,那么可以编写有关该主题的整本书。我想只是想起一些随机的东西,看看那个代码:
如果列表被堆破坏,则无提示转换为整数将抛出ClassCastException
。如果列表中为空,则自动拆箱将引发NullPointerException
。如果您忘记初始化列表,那将抛出NullPointerException
,否则编译器将失败,并显示错误“列表未初始化”,具体取决于您编写代码的方式。
答案 3 :(得分:0)
在执行list.remove(integer)后,由于list元素为空,将仅引发 ConcurrentModificationException 。