Большинство стандартных классов исключений предоставляют конструктор, который принимает сообщение, например:
public UnsupportedOperationException(String message) {
super(message);
}
Приведенный выше класс просто вызывает конструктор своего родителя, который вызывает конструктор своего родителя и т. Д., В конечном итоге завершается:
public Throwable(String message) {
...
}
Если вы создаете свой собственный класс исключений, я думаю, что было бы неплохо следовать этому соглашению.