Рубрики
Без рубрики

Будет ли ошибка поймана блоком Catch в Java?

Быстрое и практическое введение в ошибки Java.

Автор оригинала: baeldung.

1. Обзор

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

Для получения подробной информации о Throwable в Java, пожалуйста, ознакомьтесь с нашей статьей об Обработке исключений в Java .

2. Улавливание Ошибок

Начиная с java.lang.Ошибка класс в Java не наследуется от java.lang.Исключение , мы должны объявить базовый класс 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. Заключение

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