1. Обзор
В этой короткой статье мы покажем, как правильно отлавливать ошибки Java, и объясним, когда это не имеет смысла.
Подробную информацию о Throwable
s в 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. Заключение
В этой статье мы увидели, когда и как Error
можно перехватывать в Java. Пример кода можно найти в проекте GitHub .