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 .