Является ли Throwable классом в Java и какова его роль?

«Является ли Throwable классом в Java и какова его роль?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, java.lang.Throwable — это базовый класс в иерархии всех обрабатываемых исключений и ошибок в Java. Все, что может быть "брошено" оператором throw и перехвачено блоком catch, должно наследоваться от Throwable.

Иерархия Throwable:

         Throwable
          /      
   Exception    Error
        |          |
RuntimeException  OutOfMemoryError, StackOverflowError...
(Unchecked)       (Не рекомендуется ловить)

Практическое использование и рекомендации:

  1. Корень иерархии: Throwable — суперкласс для Exception (ожидаемые проблемы) и Error (критические системные сбои).
  2. Не рекомендуется к ловле: Перехват Throwable в catch — плохая практика, так как вы можете случайно обработать неустранимые Error (например, OutOfMemoryError), маскируя реальную проблему.
    
    // ПЛОХО: Ловит всё, включая фатальные Error
    try { /* код */ } catch (Throwable t) { /* обработка */ }

// ХОРОШО: Ловим только обрабатываемые исключения try { / код / } catch (Exception e) { / обработка / }


3.  **Ключевые методы:** `Throwable` предоставляет методы для диагностики: `getMessage()`, `getCause()`, `printStackTrace()`.

**Вывод:** Используйте конкретные подклассы `Exception` для обработки ошибок, а `Throwable` рассматривайте как корневой тип в иерархии.