«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.