Ответ
Проверяемые исключения (checked exceptions) — это исключения, которые компилятор Java требует явно обработать или объявить в сигнатуре метода. Они представляют ошибки, которые программа может и должна предвидеть и корректно обработать (например, проблемы с вводом-выводом, отсутствие файла).
Зачем они нужны:
- Обеспечение надежности: Компилятор заставляет разработчика задуматься об обработке потенциальных проблем, что повышает устойчивость кода.
- Улучшение документации: Сигнатура метода с
throwsявно указывает на возможные ошибки, улучшая читаемость API. - Контроль за ошибками: Предотвращает ситуации, когда исключение может быть проигнорировано по невнимательности.
Пример:
// Компилятор требует либо обработать IOException, либо объявить его в throws
public String readFirstLine(String filePath) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
return br.readLine();
}
// Или обработать на месте:
// } catch (IOException e) { ... }
}
Альтернатива: Непроверяемые исключения (RuntimeException) используются для ошибок, которые часто указывают на баги в логике программы (например, NullPointerException, IllegalArgumentException).
Ответ 18+ 🔞
Ну вот, опять про эти ваши исключения, блядь. Сидишь такой, пишешь код, всё пучком, а тут бац — компилятор тебе как по ебалу: «А ты, сука, про IOException не забыл? А?». Это и есть проверяемые исключения, ёпта.
Что это за зверь такой? Это такие ошибки, которые компилятор, как заботливая, но ебнутая тёща, требует у тебя на виду держать. Типа, «сынок, файлик-то может не найтись, ты уж будь добр, приготовься». Не обработаешь или в сигнатуру не вынесешь — нихуя не скомпилируется.
Нахуя они вообще?
- Чтобы не быть распиздяем. Тебя буквально за шкирку трясут: «Смотри, тут может пиздануться, подстели соломки!». В теории код становится менее кривым.
- Чтобы не гадать, как в бабкиной книге сонника. Глянул на метод —
throws IOException, SQLException— и сразу ясно, в какую жопу могут прилететь кирпичи. Документация, блядь, на уровне языка. - Контроль, блядь. Чтобы какой-нибудь поц не сделал вид, что ошибок не бывает, и не проигнорировал их втихую.
Смотри, как это выглядит:
// Попробуй-ка этот метод без try-catch или throws написать — получишь пизды от компилятора
public String readFirstLine(String filePath) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
return br.readLine();
}
// Либо тут лови, либо выше объявляй — третьего не ебут.
}
А что взамен?
А взамен — непроверяемые исключения (RuntimeException). Это уже для случаев, когда ты сам мудак и накосячил в логике. NullPointerException, IllegalArgumentException — это ж не система тебя подвела, это ты, гений, просрал проверку на null или аргумент кривой передал. За такие ошибки компилятор тебя пинать не будет — сам разбирайся, когда на проде всё ебнется.