Назад к вопросам
Junior
75
questionbank
Какие ключевые классы исключений существуют в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Java иерархия исключений начинается с класса Throwable. У него есть два основных подкласса: Error и Exception.
Error:
- Представляет серьезные проблемы, которые обычно не должны быть пойманы приложением.
- Возникают по вине виртуальной машины (JVM) или окружающей среды.
- Примеры:
OutOfMemoryError,StackOverflowError.
Exception:
- Представляет условия, которые приложение может и должно обрабатывать.
- Делится на два типа:
- Checked Exceptions (Проверяемые исключения):
- Должны быть либо пойманы (блоками
try-catch), либо объявлены в сигнатуре метода (throws). - Компилятор принудительно проверяет их обработку.
- Обычно представляют собой предсказуемые, но нежелательные условия, которые могут возникнуть во время выполнения.
- Примеры:
IOException,FileNotFoundException,SQLException.
- Должны быть либо пойманы (блоками
- Unchecked Exceptions (Непроверяемые исключения):
- Наследуются от
RuntimeException. - Не требуют обязательной обработки или объявления в сигнатуре метода.
- Часто указывают на ошибки в логике программы или некорректное использование API.
- Примеры:
NullPointerException,ArrayIndexOutOfBoundsException,IllegalArgumentException.
- Наследуются от
- Checked Exceptions (Проверяемые исключения):
Вот основные классы исключений:
java.lang.Throwable(Базовый класс)java.lang.Error(Необрабатываемые ошибки)java.lang.OutOfMemoryErrorjava.lang.StackOverflowError
java.lang.Exception(Обрабатываемые исключения)java.io.IOException(Checked)java.io.FileNotFoundException(Checked)
java.sql.SQLException(Checked)java.lang.RuntimeException(Unchecked)java.lang.NullPointerExceptionjava.lang.IllegalArgumentExceptionjava.lang.IndexOutOfBoundsException
Таблица сравнения:
| Особенность | Checked Exception | Unchecked Exception (RuntimeException) |
Error |
|---|---|---|---|
| Наследование | Exception (кроме RuntimeException и его потомков) |
RuntimeException |
Error |
| Принудительная обработка/объявление | Да | Нет | Нет |
| Причина возникновения | Предсказуемые сбои | Ошибки программирования, некорректное использование | Серьезные проблемы JVM/среды |
| Восстановление после | Часто возможно | Редко (указывает на баг) | Практически невозможно |
Пример обработки исключений:
// Пример обработки checked exception и unchecked exception
public class ExceptionHandlingDemo {
public void readFile(String fileName) {
try {
// Попытка чтения файла - может выбросить FileNotFoundException (checked)
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(fileName));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
reader.close(); // Также может выбросить IOException (checked)
// Пример unchecked exception (может возникнуть, если fileName == null)
int length = fileName.length(); // NullPointerException (unchecked)
} catch (java.io.FileNotFoundException e) {
// Обработка FileNotFoundException
System.err.println("Ошибка: Файл не найден - " + e.getMessage());
} catch (java.io.IOException e) {
// Обработка общих ошибок ввода/вывода
System.err.println("Ошибка чтения файла: " + e.getMessage());
} catch (java.lang.NullPointerException e) {
// Обработка NullPointerException - необязательна, но хорошая практика для отладки
System.err.println("Ошибка: Использована нулевая ссылка - " + e.getMessage());
}
}
public static void main(String[] args) {
ExceptionHandlingDemo demo = new ExceptionHandlingDemo();
demo.readFile("non_existent_file.txt"); // Вызовет FileNotFoundException
demo.readFile(null); // Может вызвать NullPointerException
}
}