Есть ли у каждого исключения требуемый try-catch?

Простой вопрос, и я не могу найти для него ответ. Требуется ли каждое исключение в Java использовать try-catch? Или это только для FileNotFoundException?

Множество исключений (IndexOutOfBoundException, ArithmeticException, IlligalArgumentException, NullPointerException) говорят, что им не нужно исключение, но FileNotFoundException делает)... и я не могу найти ответ, который делает и который не нужен попробуй поймать.

Ответ 1

Не обязательно иметь блок try/catch для ваших исключений. Вместо этого вы можете throw их для тех, кто умеет правильно обрабатывать исключение.

Существует 2 вида исключений: проверено и не отмечено. Проверенное исключение может считаться тем, которое найдено компилятором, и компилятор знает, что у него есть шанс произойти, поэтому вам нужно catch или throw его. Например, открытие файла. У этого есть шанс провалиться, и компилятор знает это, поэтому вы вынуждены catch или throw возможный IOException.

Неконтролируемое исключение может считаться тем, у кого есть шанс произойти, но на основе вашего кода компилятор не знает. Другими словами, это ошибка программирования. Например, если вы берете пользовательский ввод и ожидаете номер, и пользователь вводит что-то, чего вы не ожидали, например строку, ваша программа выбрала бы NumberFormatException. Вы можете предсказать эти сценарии и поставить try/catch, чтобы попытаться избежать их до их возникновения. Очень редко встречается человек, добавляющий throws NullPointerException или throws NumberFormatException (или бросая любое исключение Unchecked, если на то пошло). Это разрешено, но явное создание этого исключения является странным, и большинство людей скажут, что это плохой стиль кодирования.

Обратите внимание, что все Проверенные предложения должны быть пойманы или брошены на что-то, что может его обработать; если вы этого не сделаете, ваша программа не будет компилироваться. Если вы выбросите его на то, что не может его обработать, ваша программа, скорее всего, сработает, если это произойдет.

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

Также интересно отметить, что, хотя проверенные исключения являются подклассами исключений Exception и Unchecked, являются подклассами RuntimeException, само RuntimeException является подклассом Exception. Это означает, что если вы действительно этого захотите, один try {} catch (Exception e) {} поймает каждое исключение, которое ваша программа может выбросить. Конечно, это считается ужасным способом борьбы с исключениями, и вы должны поймать каждого отдельно, чтобы вы могли обрабатывать их отдельно. Не пытайтесь использовать его.

Ответ 2

Нет, не для каждого исключения требуется try-catch. Для каждого проверенного исключения требуется попытка catch. Например, исключение NullPointerException является неконтролируемым исключением, поэтому оно не требует try-catch, тогда как FileNotFoundException проверяется, поэтому он требует одного. Вы также можете добавить "броски" к сигнатуре метода и, таким образом, избежать необходимости try-catch.

Ответ 3

Читать: https://docs.oracle.com/javase/tutorial/essential/exceptions/

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

Проверено исключение - это все, что наследуется от java.lang.Exception

Отключенное исключение - это все, что наследуется от java.lang.RuntimeException

Ошибка - это все, что наследуется от java.lang.Error

Ответ 4

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

Ответ 5

Да, но если вы не хотите обрабатывать его в своем методе, вы можете передать исключение вызывающему методу с ключевым словом throws. Пример:

void execption() throws Exception {
    throw new Exception();
}

void caller() {
    try {
        execption();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Изменить: я немного ржавый на моей java, например, Джош сказал, что вы можете иметь исключенные исключения, которые не нуждаются в try/catch, например NullPointerException, но вы можете добавить его, если считаете, что неконтролируемое исключение может быть выброшены. Пример:

Object obj = null;

obj.hashCode();// if you think a NPE will be thrown you can use a try/catch here

Ответ 6

Когда метод, который вы вызываете, явно генерирует исключение, вы должны использовать цикл try....catch. Но в случае списка, который вы указали, это все исключения во время выполнения. Их бросают, когда иногда программа имеет входные данные, которые не ожидались, или программа была использована для использования, для которой она не предназначена. Для этого не требуется цикл try....catch.