Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: Java, checked exceptions, unchecked exceptions, Exception, RuntimeException

Что такое проверяемые и непроверяемые исключения?

Вопрос проверяет понимание классификации исключений в Java, что необходимо для написания надежного кода, корректно обрабатывающего ошибки.

Короткий ответ

В Java исключения делятся на проверяемые (checked) и непроверяемые (unchecked). Проверяемые исключения — это те, которые компилятор заставляет обрабатывать явно, либо в блоке try-catch, либо объявляя в сигнатуре метода с помощью throws. Они представляют ошибки, от которых программа может разумно восстановиться, например, IOException. Непроверяемые исключения — это RuntimeException и его наследники, а также Error. Компилятор не требует их обязательной обработки. Они часто указывают на ошибки программирования, например, NullPointerException или деление на ноль.

Длинный ответ

В Java исключения — это механизм обработки ошибок и нестандартных ситуаций. Ключевое различие между проверяемыми и непроверяемыми исключениями заключается в том, как компилятор Java заставляет программиста с ними работать. Это разделение влияет на дизайн API и устойчивость приложений.

Проверяемые исключения (Checked Exceptions)

Проверяемые исключения являются подклассами Exception (но не RuntimeException). Компилятор проверяет (отсюда и название), что они либо обработаны в блоке try-catch, либо объявлены в сигнатуре метода с ключевым словом throws. Это заставляет разработчика задуматься о возможных ошибках, которые могут возникнуть, и явно указать, как с ними справиться. Они обычно представляют собой внешние, непредсказуемые, но потенциально восстанавливаемые условия, такие как проблемы с вводом-выводом, отсутствие файла или сетевая ошибка.

// Пример: работа с проверяемым исключением FileNotFoundException
import java.io.*;

public class CheckedExample {
    public void readFile(String path) throws FileNotFoundException {
        // Компилятор требует либо обработать исключение,
        // либо объявить его в throws
        FileReader file = new FileReader(path);
        // ... чтение файла
    }

    public void readFileSafely(String path) {
        try {
            FileReader file = new FileReader(path);
        } catch (FileNotFoundException e) {
            System.out.println("Файл не найден: " + e.getMessage());
        }
    }
}

Непроверяемые исключения (Unchecked Exceptions)

Непроверяемые исключения включают RuntimeException и его подклассы, а также Error и его подклассы. Компилятор не требует их обязательной обработки или объявления. Они часто возникают из-за логических ошибок в коде, таких как обращение к элементу массива по неверному индексу (ArrayIndexOutOfBoundsException), попытка вызова метода у null-ссылки (NullPointerException) или неверное приведение типов (ClassCastException). Ошибки (Error), например OutOfMemoryError, обычно указывают на серьезные проблемы среды выполнения, от которых программа не должна пытаться восстанавливаться.

// Пример: непроверяемые исключения возникают во время выполнения
public class UncheckedExample {
    public void causeNPE() {
        String str = null;
        // Это вызовет NullPointerException (RuntimeException)
        // Компилятор не предупредит об этом.
        System.out.println(str.length());
    }

    public void handleUnchecked() {
        try {
            int result = 10 / 0; // ArithmeticException
        } catch (ArithmeticException e) {
            System.out.println("Деление на ноль: " + e);
        }
    }
}

Где и как применяется

  • Проверяемые исключения используют, когда вызывающий код может и должен что-то сделать с ошибкой (например, повторить операцию, запросить другой файл, уведомить пользователя). Они характерны для операций ввода-вывода, работы с базами данных, сетевых вызовов.
  • Непроверяемые исключения применяют для ошибок программирования, которые часто указывают на баг в коде. Их также используют в библиотеках и фреймворках для сигнализации о нарушении контракта (неверный аргумент, недопустимое состояние).

Вывод: Используйте проверяемые исключения для ошибок, от которых вы ожидаете, что вызывающий код сможет корректно восстановиться. Непроверяемые исключения подходят для ошибок, которые обычно являются следствием багов и не требуют обязательного отлова на каждом уровне вызова, что упрощает код в ситуациях, когда восстановление невозможно или нецелесообразно.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Java

    Java

Ключевые слова

#Java

#checked exceptions

#unchecked exceptions

#Exception

#RuntimeException

Подпишись на Java Developer в телеграм