Я пытаюсь определить свой собственный класс исключений самым простым способом, и вот что я получаю:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Вот что говорит компилятор Java:
cannot find symbol: constructor MyException(java.lang.String)
У меня было ощущение, что этот конструктор должен быть унаследован java.lang.Exception
, не так ли?
java
exception
inheritance
yegor256
источник
источник
if your class has no constructor, you get the default even if the superclass does not have it
Последняя часть невозможна, если только у суперкласса нет конструктора по умолчанию, который доступен для этого класса (может быть защищен или защищен пакетом). В противном случае вы должны явно вызвать один из родительских конструкторов, иначе компиляция не удастся.MyException(Throwable)
иMyException(String, Throwable)
конструкторы должным образом поддерживать исключение сцепления .Типичное пользовательское исключение, которое я бы определил, выглядит примерно так:
Я даже создаю шаблон с использованием Eclipse, поэтому мне не нужно писать все снова и снова.
источник
Если вы используете диалоговое окно нового класса в Eclipse, вы можете просто установить поле Superclass
java.lang.Exception
и отметить «Конструкторы из суперкласса», и оно сгенерирует следующее:В ответ на вопрос ниже о том, как не вызывать
super()
конструктор defualt, Oracle говорит следующее :источник
super()
?Причина этого объясняется в статье о наследовании платформы Java, которая гласит:
источник
источник
Исключительный класс имеет два конструктора
public Exception()
- Это создает исключение без какой-либо дополнительной информации. Характер исключения обычно выводится из имени класса.public Exception(String s)
- Создает исключение с указанным сообщением об ошибке. Подробное сообщение - это строка, описывающая условие ошибки для этого конкретного исключения.источник
public Exception(Throwable)
иpublic Exception(String, Throwable)
. Они необходимы для правильной поддержки цепочки исключений .Если вы наследуете от Exception, вы должны предоставить конструктор, который принимает String в качестве параметра (он будет содержать сообщение об ошибке).
источник
и не забудьте самый простой способ вызвать исключение (вам не нужно создавать класс)
источник