Ответ
Проверяемые исключения (checked exceptions) — это исключения, которые компилятор Java обязывает обрабатывать или объявлять. Они наследуются от java.lang.Exception (но не от RuntimeException).
Непроверяемые исключения (unchecked exceptions) — это исключения, обработка которых не требуется компилятором. К ним относятся:
RuntimeExceptionи его наследники (логические ошибки программы).Errorи его наследники (критические системные сбои).
| Ключевые различия: | Критерий | Проверяемые (Checked) | Непроверяемые (Unchecked) |
|---|---|---|---|
| Наследование | От Exception (не RuntimeException) |
От RuntimeException или Error |
|
| Обработка | Обязательна (try-catch или throws) |
Не обязательна | |
| Время проверки | Время компиляции | Время выполнения | |
| Примеры | IOException, SQLException, ClassNotFoundException |
NullPointerException, IllegalArgumentException, ArrayIndexOutOfBoundsException, OutOfMemoryError |
Почему такое разделение? Проверяемые исключения предназначены для восстановимых условий, которые программа должна предвидеть (например, отсутствие файла). Непроверяемые — для ошибок программирования или фатальных сбоев.
Пример на практике:
// Проверяемое исключение: ОБЯЗАТЕЛЬНА обработка или объявление 'throws'
try {
FileInputStream fis = new FileInputStream("missing.txt");
} catch (FileNotFoundException e) { // Компилятор требует этот блок
System.err.println("Файл не найден: " + e.getMessage());
}
// Непроверяемое исключение: обработка НЕ обязательна
String text = null;
// Компилятор не ругается, но в runtime упадет NullPointerException
// System.out.println(text.length());