«1. Обзор

В этой короткой статье мы покажем, как правильно перехватывать ошибки Java, и объясним, когда это не имеет смысла.

Подробную информацию о Throwables в Java см. в нашей статье об обработке исключений в Java.

2. Перехват ошибок

Так как класс java.lang.Error в Java не наследуется от java.lang.Exception, мы должны объявить базовый класс Error или конкретный подкласс Error, который нам нужен. для захвата — в операторе catch, чтобы его перехватить.

Следовательно, если мы запустим следующий тестовый пример, он будет пройден:

@Test(expected = AssertionError.class)
public void whenError_thenIsNotCaughtByCatchException() {
    try {
        throw new AssertionError();
    } catch (Exception e) {
        Assert.fail(); // errors are not caught by catch exception
    }
}

Следующий модульный тест, однако, ожидает, что оператор catch поймает ошибку:

@Test
public void whenError_thenIsCaughtByCatchError() {
    try {
        throw new AssertionError();
    } catch (Error e) {
        // caught! -> test pass
    }
}

Обратите внимание, что Java Виртуальная машина выдает ошибки, чтобы указать на серьезные проблемы, от которых она не может избавиться, например, нехватка памяти и переполнение стека.

Таким образом, у нас должна быть очень и очень веская причина поймать ошибку!

3. Заключение

В этой статье мы рассмотрели, когда и как можно отлавливать ошибки в Java. Пример кода можно найти в проекте GitHub.