От какого класса наследуются checked исключения в Java?

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

Ответ

Checked исключения в Java наследуются от класса Exception, но НЕ от RuntimeException.

Ключевые отличия:

  • Checked исключения (Exception) – проверяются компилятором. Метод должен либо обработать их в try-catch, либо объявить в сигнатуре с throws.
  • Unchecked исключения (RuntimeException) – не проверяются компилятором.

Пример checked исключения:

import java.io.*;

public void readFile() throws IOException { // Обязательное объявление
    BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    // ... чтение файла
}

// Или обработка:
public void readFileSafe() {
    try {
        BufferedReader br = new BufferedReader(new FileReader("file.txt"));
    } catch (IOException e) { // Обработка checked исключения
        System.err.println("Файл не найден: " + e.getMessage());
    }
}

Иерархия: ThrowableException ← (Checked исключения, например, IOException) и RuntimeException ← (Unchecked исключения).