Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от
Throwable. В
базовых Exception,
RuntimeException и
Error нет ничего кроме неё.
Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.
Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть
getLocalizedMessage, который в наследниках может возвращать локализованный вариант сообщения.
Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (
RPC). Сеттер можно отключить параметром конструктора
writableStackTrace.
Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании
try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора
enableSuppression.