Выброс пользовательских исключений в Java
Почему мне нужно обернуть мои измененные пользовательские исключения с помощью try
/catch
во время попытки их бросить, но мне не нужно делать это для общих исключений? Как и в примере, мой подкласс Exception
:
public class MyException extends Exception {
public MyException(String msg) {
super(msg);
}
}
Отбрасывание исключений:
public class Exe {
private static void testex(String test) {
if (null!=test) {
throw new UnsupportedAddressTypeException();
} else {//Removing try/catch block results in compile failure
try {
throw new MyException("message");
} catch (MyException e) {
e.printStackTrace();
}
}
}
}
Ответы
Ответ 1
UnsupportedAddressTypeException - это подкласс RuntimeException и JavaDoc:
RuntimeException - суперкласс из тех исключений, которые могут быть выброшены во время нормальной работы виртуальной машины Java.
Не требуется метод объявлять в свойстве throws любые подклассы RuntimeException, которые могут быть выбраны во время выполнения метода, но не пойманы.
Ответ 2
Если ваше исключение расширяет java.lang.Exception, вы должны поймать его (или ревертировать). Если он расширяет java.lang.RuntimeException, вы не обязаны это делать. Вы обнаружите, что это верно и для всех стандартных исключений.
изменить Изменены слова не должны на не требуется
Ответ 3
Ваш статический метод должен объявить
private static void testex(String test) throws MyException
если вы хотите, чтобы метод бросил его (и не ловить и обработать его внутренне).
Ответ 4
Из Java Tutorial:
Действительный код языка программирования Java должен соблюдать Catch или Specify Требование. Это означает, что код, который может бросать определенные исключения должен быть заключен в одно из следующих действий:
-
Оператор try, который ловит исключение. Попытка должна предоставить обработчик для исключения, как описано в разделе Catching and Handling Исключения.
-
Метод, который указывает, что он может генерировать исключение. Метод должен предоставить предложение throws, в котором указано исключение, как описано в Указание исключений, созданных методом.
Код, который не выполняет чек или Указать требование, не будет компиляции. Не все исключения подчиняются требованиям Catch или Specify Requirement.
[...]
Исключения времени выполнения не подпадают под действие Catch или Specify Requirement. Исключениями Runtime являются те, которые указаны в RuntimeException и его подклассах.