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

Чем отличаются checked и unchecked exceptions в Java?

1️⃣ Как кратко ответить

Checked exceptions в Java требуют обязательной обработки или объявления в сигнатуре метода с помощью throws. Unchecked exceptions не требуют обязательной обработки и могут возникать в любой точке программы, чаще всего из-за ошибок программиста.

2️⃣ Подробное объяснение темы

В Java исключения (exceptions) делятся на две основные категории: checked и unchecked. Эти категории определяют, как исключения должны обрабатываться в коде и как они влияют на выполнение программы.

Checked Exceptions:

Checked exceptions представляют собой исключения, которые проверяются во время компиляции. Это означает, что компилятор требует, чтобы вы либо обработали эти исключения с помощью блока try-catch, либо объявили их в сигнатуре метода с помощью ключевого слова throws. Checked exceptions обычно используются для обозначения условий, которые могут возникнуть из-за внешних факторов, таких как проблемы с вводом-выводом, доступом к базе данных и т.д.

Пример использования checked exception:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
​
public class FileProcessor {
    public void readFile(String filePath) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader(filePath));
        try {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } finally {
            reader.close();
        }
    }
}
  • IOException — это checked exception. Компилятор требует, чтобы метод readFile либо обрабатывал это исключение, либо объявлял его с помощью throws IOException.
  • Блок try-finally используется для гарантированного закрытия ресурса BufferedReader, даже если произойдет исключение.

Unchecked Exceptions:

Unchecked exceptions, также известные как runtime exceptions, не проверяются во время компиляции. Это означает, что компилятор не требует их обработки или объявления. Unchecked exceptions обычно возникают из-за ошибок программиста, таких как деление на ноль, доступ к элементу массива по недопустимому индексу и т.д.

Пример использования unchecked exception:

public class DivisionCalculator {
    public int divide(int numerator, int denominator) {
        return numerator / denominator;
    }
​
    public static void main(String[] args) {
        DivisionCalculator calculator = new DivisionCalculator();
        try {
            System.out.println(calculator.divide(10, 0));
        } catch (ArithmeticException e) {
            System.out.println("Cannot divide by zero.");
        }
    }
}
  • ArithmeticException — это unchecked exception. Компилятор не требует его обработки, но в данном примере мы используем блок try-catch для обработки возможного деления на ноль.
  • Метод divide не объявляет throws ArithmeticException, так как это не требуется для unchecked exceptions.

Зачем это нужно:

  • Checked exceptions помогают разработчикам учитывать возможные ошибки, которые могут возникнуть из-за внешних факторов, и требуют явной обработки, что делает код более надежным.
  • Unchecked exceptions позволяют разработчикам сосредоточиться на логике программы, не перегружая код обработкой ошибок, которые возникают из-за ошибок в коде, а не из-за внешних факторов.

Тема: Java
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки