Чем отличаются 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 позволяют разработчикам сосредоточиться на логике программы, не перегружая код обработкой ошибок, которые возникают из-за ошибок в коде, а не из-за внешних факторов.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться