Most exception subclasses I create have no methods, only copies of the constructors of its parent class. All these constructors do is call super(arguments). There are usually two or four constructors to copy:
- no arguments for a no-message exception
- String for only a message
- Throwable to wrap a throwable (exception or error) (sometimes absent)
- String, Throwable to wrap a throwable but give a custom error message (sometimes absent)
I often create many constructors so I can include (and allow the retrieval of) application-specific properties. Often they're just used in the message, other times they're used by the handler.