Ответ
Checked исключение (проверяемое исключение) — это исключение, которое компилятор Java обязывает либо обработать в блоке try-catch, либо объявить в сигнатуре метода с помощью ключевого слова throws. Все checked исключения являются подклассами java.lang.Exception, но не java.lang.RuntimeException.
Почему они существуют? Они предназначены для обработки ожидаемых, но нештатных ситуаций, от которых программа может потенциально восстановиться (например, отсутствие файла, разрыв сетевого соединения).
Пример 1: Объявление в throws
public String readFirstLineFromFile(String path) throws IOException {
// FileReader может выбросить FileNotFoundException (checked)
BufferedReader br = new BufferedReader(new FileReader(path));
return br.readLine(); // readLine() может выбросить IOException
}
Пример 2: Обработка в try-catch
public String readFirstLineFromFile(String path) {
try {
BufferedReader br = new BufferedReader(new FileReader(path));
return br.readLine();
} catch (IOException e) { // Ловим checked исключение
// Восстановление: возвращаем значение по умолчанию
System.err.println("Could not read file: " + e.getMessage());
return "";
}
}
| Сравнение с unchecked исключениями (RuntimeException): | Критерий | Checked Exception | Unchecked Exception (RuntimeException) |
|---|---|---|---|
| Обработка | Обязательна (компилятор проверяет) | Не обязательна | |
| Наследование | Exception, но не RuntimeException |
RuntimeException |
|
| Тип ошибок | Восстановимые, внешние условия (I/O, сеть) | Ошибки программирования (NPE, индекс за границами) | |
| Примеры | IOException, SQLException, ClassNotFoundException |
NullPointerException, IllegalArgumentException, ArrayIndexOutOfBoundsException |