← Назад к вопросам

Кто определяет проверяемость исключения

1.3 Junior🔥 161 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Определение проверяемости исключения

Проверяемость исключения в Java определяется иерархией наследования классов исключений. Это ключевая особенность Java, которая разделяет все исключения на две категории в зависимости от их типа.

Иерархия и правила

Все исключения в Java наследуются от класса Throwable. Проверяемость определяется следующим образом:

Проверяемые исключения (Checked Exceptions):

  • Наследуют класс Exception, но НЕ наследуют RuntimeException
  • Компилятор требует явно обработать или объявить в throws
  • Примеры: IOException, SQLException, FileNotFoundException

Непроверяемые исключения (Unchecked Exceptions):

  • Наследуют класс RuntimeException или Error
  • Компилятор не требует явной обработки
  • Примеры: NullPointerException, IndexOutOfBoundsException, IllegalArgumentException

Примеры кода

// Проверяемое исключение
public void readFile(String path) throws IOException {
    FileReader reader = new FileReader(path); // может выбросить IOException
    reader.close();
}

// Непроверяемое исключение
public void processArray(int[] array, int index) {
    int value = array[index]; // может выбросить ArrayIndexOutOfBoundsException
    // не нужно объявлять в throws
}

// Пример обработки проверяемого исключения
try {
    readFile("data.txt");
} catch (IOException e) {
    System.out.println("Ошибка чтения файла: " + e.getMessage());
}

Иерархия классов

Throwable
├── Error (непроверяемые)
│   ├── OutOfMemoryError
│   └── StackOverflowError
├── Exception
│   ├── IOException (проверяемое)
│   ├── SQLException (проверяемое)
│   └── RuntimeException (непроверяемое)
│       ├── NullPointerException
│       └── IllegalArgumentException

Роль компилятора

Компилятор проверяет:

  1. Если метод может выбросить проверяемое исключение, оно должно быть либо перехвачено в try-catch, либо объявлено в сигнатуре методом throws
  2. Непроверяемые исключения не требуют такого контроля
  3. При переопределении методов в подклассах не можно добавлять новые проверяемые исключения в throws

Почему это важно

  • Безопасность типов: разработчик обязан предусмотреть обработку критических ошибок
  • Явность контракта: метод честно указывает, какие проблемы могут возникнуть
  • Предотвращение крашей: проверяемые исключения помогают избежать пропущенных обработок

Таким образом, проверяемость исключения определяется типом класса исключения в иерархии Java: наследует ли оно Exception (или IOException, SQLException) или RuntimeException.