Разработчик может добавлять в исключение, как и в любой другой класс, произвольные поля и методы. Но у всех исключений есть общая часть, унаследованная от Throwable. В базовых Exception, RuntimeException и Error нет ничего кроме неё.

Cause – другое исключение, которым было вызвано это. Опционально. Можно задать через сеттер или аргумент конструктора, но задается не больше одного раза.

Message – сообщение ошибки. Устанавливается в конструкторе. Кроме обычного геттера есть getLocalizedMessage, который в наследниках может возвращать локализованный вариант сообщения.

Stack Trace – стек вызовов методов потока до того места, где сообщение было сконструировано (не выброшено!). JVM позволено терять часть, или даже все фреймы стека. Есть сеттер для фреймворков удаленного вызова (RPC). Сеттер можно отключить параметром конструктора writableStackTrace.

Suppressed – список исключений, которые были выброшены и подавлены, пока это исключение шло к обработчику. Сюда попадают подавленные исключения финализации ресурсов при использовании try-with-resource. Сеттер доступен и для пользовательского кода. Подавление можно отключить параметром конструктора enableSuppression.