Вопрос по exception, java – Не является ли непроверенное исключение, попавшее в блок try, проверенным исключением в Java?

8

Мне сказали, что в Java непроверенные исключения могут быть перехвачены в блоке try, но если он перехвачен, не называется ли он проверенным исключением?

Ирония "проверено" .... Pacerier

Ваш Ответ

3   ответа
13

которые не нужно отлавливать вtry-catch блок. Непроверенные исключения являются подклассамиRuntimeException или жеError классы.

Проверенные исключения - это исключения, которые необходимо перехватить вtry-catch блок.

Определение проверенных и непроверенных исключений можно найти вРаздел 11.2. Проверка исключений во время компиляции изСпецификация языка Java:

The unchecked exceptions classes are the class RuntimeException and its subclasses, and the class Error and its subclasses. All other exception classes are checked exception classes.

Просто потому, что непроверенное исключение попадает вcatch Блок не делает его проверенным исключением - это просто означает, что непроверенное исключение было перехвачено и было обработано вcatch блок.

Можноcatch непроверенное исключение, а затемthrow новое проверенное исключение, поэтому любые методы, вызывающие этот метод, где может произойти непроверенное исключение, заставляют метод, вызывающий его, обрабатывать какое-то исключение.

Например,NumberFormatException которые могут быть выброшены при обработке некоторых непарсируемыхString кInteger.parseInt Метод является непроверенным исключением, поэтому его не нужно перехватывать. Однако метод, вызывающий этот метод, может захотеть, чтобы его вызывающая сторона должным образом обработала такую проблему, поэтому он может выдать другое исключение, которое проверено (не подклассRuntimeException.):

public int getIntegerFromInput(String s) throws BadInputException {
    int i = 0;
    try {
        i = Integer.parseInt(s);
    catch (NumberFormatException e) {
        throw new BadInputException();
    }

    return i;
}

В приведенном выше примереNumberFormatException пойман вtry-catch блок и новыйBadInputException (который должен быть проверенным исключением)

Любой звонящий наgetIntegerFromInput Метод будет вынужден пойматьBadInputExceptionи вынуждены иметь дело с плохими входами. ЕслиNumberFormatException не должны были быть перехвачены и обработаны, любой вызывающий этот метод должен был бы правильно обработать исключение.

(Кроме того, следует отметить, что употребление исключения и выполнение чего-то, что на самом деле не имеет смысла, не считается хорошей практикой - обрабатывайте исключения, когда можно выполнить значимую обработку исключений.)

Из учебников по Java:

Lessons: Exceptions The Catch or Specify Requirement - discusses checked exceptions. Chained Exceptions - the practice of catching an exception and throwing a new one, as the example above. Unchecked Exceptions — The Controversy
Error: User Rate Limit Exceededeating an exception and doing something that is not really meaningful is not considered a good practice -- handle exceptions where meaningful exception handling can be performed
4

оно не называется проверенным исключением только потому, что оно перехвачено. Блок перехвата может быть написан для перехвата любых исключений или ошибок. Проверенные исключения - это те, которые подпадают под действиеПоймай или уточни требованиеэто означает, что выrequired либо поймать их, либо объявить, что ваш метод может их выбросить. Вы можете думать о терминеchecked Это означает, что компилятор проверит, чтобы убедиться, что вы придерживаетесь catch или задаете требование. Ошибки и RuntimeExceptions называютсяunchecked исключения, потому что компилятор не применяет к ним это требование.

1

что различие заключается в том, что компилятор будет отмечать непроверенные проверенные исключения и методы, которые выдают проверенные исключения, но не объявляют их в сигнатуре метода во время компиляции.

Непроверенные исключения не требуют декларации или перехвата, но ни одно из них не запрещено. Компилятор просто не идентифицирует их как ошибки.

Похожие вопросы