Ответ
В Java неудачи представлены иерархией классов Throwable и делятся на два основных типа: исключения (Exceptions) и ошибки (Errors).
1. Исключения (Exception) — проблемы, которые можно и нужно обрабатывать.
- Checked исключения — компилятор требует явной обработки (через
try-catchилиthrows). Пример:IOException,SQLException. - Unchecked исключения (RuntimeException) — не требуют обязательной обработки. Пример:
NullPointerException,IllegalArgumentException.
2. Ошибки (Error) — критические системные проблемы, которые обычно не обрабатываются. Пример: OutOfMemoryError, StackOverflowError.
Пример обработки исключения:
try {
FileInputStream fis = new FileInputStream("file.txt"); // Может выбросить FileNotFoundException
// Работа с файлом
} catch (FileNotFoundException e) {
System.err.println("Файл не найден: " + e.getMessage());
// Логирование или альтернативная логика
} finally {
// Код для освобождения ресурсов (если они были открыты до блока try)
}
Лучшие практики:
- Используйте
try-with-resourcesдля автоматического закрытия ресурсов, реализующихAutoCloseable.try (FileInputStream fis = new FileInputStream("file.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis))) { // Автоматическое закрытие fis и br } catch (IOException e) { // Обработка } - Ловите конкретные исключения, а не общий
Exception. - Не игнорируйте исключения в пустых блоках
catch. - Используйте логирование (например, SLF4J) вместо
printStackTrace()для записи ошибок. - Создавайте собственные, информативные исключения, если стандартные не подходят.