Можно ли бросать исключение типа Throwable в Java?

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

Ответ

Технически можно, но это крайне не рекомендуется.

Throwable — корневой класс иерархии исключений Java. Он имеет два основных прямых потомка:

  1. Error (например, OutOfMemoryError, StackOverflowError) — критические системные ошибки, которые обычно не следует перехватывать или бросать в прикладном коде.
  2. Exception — исключения, с которыми работает приложение.

Проблема с Throwable:

  • Излишняя общность: Обработчик не сможет понять природу проблемы (фатальная ошибка Error или recoverable Exception).
  • Нарушение best practices: Код становится менее читаемым и поддерживаемым.

Пример (ПЛОХО):

public void riskyMethod() throws Throwable { // Слишком широко
    throw new Throwable("Что-то пошло не так");
}

Рекомендуемый подход: Используйте конкретные подклассы.

// Для проверяемых исключений (checked)
public void readFile() throws IOException {
    throw new IOException("Файл не найден");
}

// Для непроверяемых исключений (unchecked/runtime)
public void calculate(int value) {
    if (value < 0) {
        throw new IllegalArgumentException("Значение не может быть отрицательным");
    }
}

Всегда предпочитайте максимально конкретный тип исключения.