← Назад к вопросам

Что выдаст ошибку, если не обработать проверяемое исключение

2.2 Middle🔥 71 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что выдаст ошибка, если не обработать проверяемое исключение

В Java существует два типа исключений: проверяемые (checked exceptions) и непроверяемые (unchecked exceptions). Вопрос касается именно проверяемых исключений, которые требуют обязательной обработки на этапе компиляции.

Ошибка компиляции

Если не обработать проверяемое исключение, вы получите ошибку компиляции (compile-time error). Компилятор Java просто не позволит вашему коду скомпилироваться:

// ❌ Это НЕ скомпилируется
public void readFile(String filename) {
    FileReader reader = new FileReader(filename); // IOException - проверяемое исключение
    // Ошибка компилятора: "unreported exception FileReader"
}

Компилятор выдаст примерно следующую ошибку:

error: unreported exception FileNotFoundException; must be caught or declared to be thrown
    FileReader reader = new FileReader(filename);
                        ^

Способы обработки проверяемых исключений

Способ 1: Catch блок

public void readFile(String filename) {
    try {
        FileReader reader = new FileReader(filename);
        // работа с файлом
    } catch (FileNotFoundException e) {
        // обработка исключения
        System.err.println("Файл не найден: " + e.getMessage());
    }
}

Способ 2: throws в сигнатуре метода

public void readFile(String filename) throws FileNotFoundException {
    FileReader reader = new FileReader(filename);
    // работа с файлом
}

Этот подход переносит ответственность на вызывающий код.

Иерархия исключений

Проверяемые исключения наследуются от Exception, но НЕ от RuntimeException:

// Иерархия исключений в Java:
// Throwable
//  ├─ Exception (проверяемые)
//  │  ├─ IOException
//  │  ├─ FileNotFoundException
//  │  └─ SQLException
//  │
//  └─ RuntimeException (непроверяемые)
//     ├─ NullPointerException
//     ├─ ArrayIndexOutOfBoundsException
//     └─ ClassCastException

Примеры проверяемых исключений

// IOException и его подклассы
FileInputStream fis = new FileInputStream("file.txt"); // throws IOException

// SQLException
Connection conn = DriverManager.getConnection(url); // throws SQLException

// ClassNotFoundException
Class.forName("com.mysql.jdbc.Driver"); // throws ClassNotFoundException

// InterruptedException
Thread.sleep(1000); // throws InterruptedException

Try-with-resources для чистого кода

В современной Java (7+) используй try-with-resources для автоматического закрытия ресурсов:

public void readFile(String filename) {
    try (FileReader reader = new FileReader(filename)) {
        // работа с файлом
        int data = reader.read();
    } catch (IOException e) {
        // обработка
    }
    // reader автоматически закроется
}

Многоуровневая обработка

public void processData() throws IOException {
    try {
        readFile("data.txt");
    } catch (FileNotFoundException e) {
        // более специфичный catch
        throw new RuntimeException("Критическая ошибка: файл не найден", e);
    } catch (IOException e) {
        // более общий catch
        System.err.println("Ошибка ввода-вывода: " + e.getMessage());
    }
}

Итоговая таблица

ТипТребует обработкиНаследникПримеры
Checked✅ ДаExceptionIOException, SQLException
Unchecked❌ НетRuntimeExceptionNullPointerException, ArithmeticException

Вывод

Если не обработать проверяемое исключение, компилятор Java выдаст ошибку компиляции и не позволит скомпилировать программу. Это фундаментальная особенность языка, которая принуждает разработчиков явно обрабатывать ошибки, делая код более надежным и предсказуемым.

Что выдаст ошибку, если не обработать проверяемое исключение | PrepBro