Может ли этот код вызвать другое исключение, кроме ConcurrentModificationException? - PullRequest
0 голосов
/ 16 апреля 2019

Мне было интересно, есть ли какое-либо другое исключение, которое может выдать этот фрагмент кода.

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 ]

2 голосов
/ 16 апреля 2019

Этот конкретный код не вызывает исключение, потому что список пуст.Но может быть NullPointerException s, если в списке есть null значения.(Распаковка: https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html)

0 голосов
/ 16 апреля 2019

Только ConcurrentModificationException будет выброшено, поскольку элемент списка пуст после выполнения list.remove (integer).

0 голосов
/ 16 апреля 2019

Ваш написанный код полностью детерминирован: он делает то же самое, где бы вы ни запускали его.Таким образом, какие исключения это бросает?Ну, запусти это.Это то, что он бросит, и больше ничего не будет бросать.Как уже говорили другие, этот код, в частности, будет выдавать ConcurrentModificationException, потому что если вы хотите удалить in-line, вам нужно использовать метод итераторов remove() (и вы не можете получить доступ к этому методу, если используете *Стиль 1003 *, вместо этого вы должны использовать Iterator<T> it = list.iterator(); while (it.next()) { .. }.

Если вы хотите общее глубокое погружение в то, какие исключения могут возникать в Java-приложениях, ну, можно написать целые книги на эту тему.просто назовите какой-нибудь случайный материал, который приходит на ум, глядя на этот код:

, если список поврежден кучей, автоматическое приведение к целому числу выдает ClassCastException. Если в списке есть нули, autounboxвыдаст NullPointerException. Если бы вы забыли инициализировать список, это выкинуло бы NullPointerException, иначе компилятор завершился бы с ошибкой «список не инициализирован», в зависимости от того, как вы написали свой код.

0 голосов
/ 16 апреля 2019

Нет, более того, цикл не будет выполнен, так как в list нет элементов, но, если бы они были, будет выброшен только ConcurrentModificationException.

...