除了ConcurrentModificationException之外,此代码还能引发其他任何异常吗?

时间:2019-04-16 12:31:17

标签: java arraylist collections integer

我想知道这段代码是否还会引发其他异常。

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。我只是想知道这段代码是否能够执行更多操作。非常感谢

4 个答案:

答案 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