Назад к вопросам
Junior
97
questionbank
В чем заключается разница между проверяемыми (checked) и непроверяемыми (unchecked) исключениями в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Разница между проверяемыми и непроверяемыми исключениями заключается в обработке компилятором и требовании явной обработки со стороны разработчика.
-
Проверяемые исключения (Checked Exceptions):
- Наследуются от
Exception(но не отRuntimeException). - Компилятор проверяет, что эти исключения либо обрабатываются (с помощью
try-catch), либо объявляются в сигнатуре метода (с помощьюthrows). - Обычно представляют собой ожидаемые, восстановимые ошибки (например, проблемы с файловым вводом-выводом).
- Примеры:
IOException,FileNotFoundException,SQLException.
- Наследуются от
-
Непроверяемые исключения (Unchecked Exceptions):
- Наследуются от
RuntimeExceptionилиError. - Компилятор не требует явной обработки или объявления в сигнатуре метода.
- Обычно представляют собой ошибки программирования или невосстановимые ситуации (например, выход за пределы массива, нулевой указатель).
- Примеры:
NullPointerException,ArrayIndexOutOfBoundsException,IllegalArgumentException,ArithmeticException.
- Наследуются от
Основное различие в том, что для проверяемых исключений компилятор требует либо обработать их, либо пробросить дальше, тогда как для непроверяемых исключений этого требования нет, и они часто указывают на ошибки логики или среды выполнения.
// Пример использования проверяемого исключения
import java.io.FileReader;
import java.io.IOException;
public class CheckedExample {
public static void main(String[] args) {
try {
FileReader file = new FileReader("nonexistentfile.txt"); // Может выбросить FileNotFoundException (проверяемое)
// Чтение из файла
} catch (IOException e) { // Обработка проверяемого исключения
System.err.println("Ошибка при работе с файлом: " + e.getMessage());
}
}
}
// Пример использования непроверяемого исключения
public class UncheckedExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
try {
System.out.println(numbers[5]); // Может выбросить ArrayIndexOutOfBoundsException (непроверяемое)
} catch (ArrayIndexOutOfBoundsException e) { // Обработка не обязательна, но возможна
System.err.println("Ошибка: выход за пределы массива");
}
String str = null;
// str.length(); // Может выбросить NullPointerException (непроверяемое) - компилятор не требует try-catch
}
}