Вопрос формулируют по-разному, суть вопроса – объяснение иерархии классов исключений. Подробно описано в
документации.
Исключения бывают
checked и
unchecked. Checked требуется указывать в сигнатуре метода в разделе
throws; перехватывать или добавлять в
throws в вызывающем его методе. Unchecked можно добавить, но не обязательно, перехватывать не обязательно даже если указана в
throws.
🔘 Throwable – базовый класс для всего что может быть использовано с оператором
throw и в конструкции
try-catch🔘 RuntimeException – «нормальные» unchecked-исключения
🔘 Error – unchecked исключения, которые означают «серьезные проблемы» приложения.
Не должны обрабатываться (хотя технически можно). Теоретически JVM может находиться в невалидном состоянии и не давать больше никаких гарантий
🔘 Exception (кроме
RuntimeException) – checked исключения