Ответ
В Java исключения делятся на проверяемые (checked) и непроверяемые (unchecked).
| Критерий | Проверяемые исключения (Checked) | Непроверяемые исключения (Unchecked) |
|---|---|---|
| Наследование | Наследуются от java.lang.Exception (но не от RuntimeException). |
Наследуются от java.lang.RuntimeException или java.lang.Error. |
| Обработка | Компилятор требует обязательной обработки: блок try-catch или объявление в throws метода. |
Обработка не обязательна на уровне компилятора. |
| Философия | Ошибки, от которых программа может и должна восстановиться (например, отсутствие файла, проблемы с сетью). | Ошибки программирования или критические сбои JVM, часто неустранимые в рантайме. |
| Примеры | IOException, SQLException, ClassNotFoundException. |
NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentException. |
Пример кода:
// Проверяемое исключение (Checked) - обязательно обработать
public String readFile(String path) throws IOException {
// Метод объявляет, что может выбросить IOException
return Files.readString(Path.of(path));
}
// Непроверяемое исключение (Unchecked) - обработка не обязательна
public void calculate(int divisor) {
if (divisor == 0) {
// ArithmeticException является RuntimeException (unchecked)
throw new ArithmeticException("Division by zero");
}
int result = 10 / divisor;
}