Ответ
В Java исключения делятся на три основные категории, отличающиеся необходимостью обработки и происхождением:
-
Проверяемые исключения (Checked Exceptions)
- Наследуются от:
java.lang.Exception(но не отRuntimeException). - Особенность: Компилятор требует их явной обработки (блок
try-catch) или объявления в сигнатуре метода с помощьюthrows. Это ошибки, от которых программа может и должна восстановиться. - Примеры:
IOException,SQLException,ClassNotFoundException. -
Пример кода:
// Обязательная обработка try { FileInputStream fis = new FileInputStream("file.txt"); } catch (FileNotFoundException e) { // FileNotFoundException - checked System.err.println("Файл не найден: " + e.getMessage()); } // Или объявление в throws public void readFile() throws IOException { ... }
- Наследуются от:
-
Непроверяемые исключения (Unchecked Exceptions / Runtime Exceptions)
- Наследуются от:
java.lang.RuntimeException. - Особенность: Компилятор не проверяет их обработку. Обычно указывают на ошибки программирования (логические ошибки, неправильное использование API).
- Примеры:
NullPointerException,ArrayIndexOutOfBoundsException,IllegalArgumentException. - Пример кода:
String str = null; str.length(); // Выбросит NullPointerException (unchecked)
- Наследуются от:
-
Ошибки (Errors)
- Наследуются от:
java.lang.Error. - Особенность: Критические проблемы уровня JVM или системы, которые приложение обычно не может или не должно обрабатывать.
- Примеры:
OutOfMemoryError,StackOverflowError,LinkageError.
- Наследуются от:
Почему такое разделение?
- Checked Exceptions обеспечивают контроль над recoverable-ошибками на этапе компиляции, заставляя разработчика продумать сценарии восстановления.
- Unchecked Exceptions не обременяют код обязательной обработкой для ошибок программирования, которые часто невозможно осмысленно обработать в месте возникновения.