Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды ошибок в Java
В Java существует иерархия обработки ошибок, которая разделяется на несколько ключевых категорий. Разберу каждую из них и объясню различия.
Иерархия исключений
Все ошибки в Java наследуются от класса Throwable. Верхняя часть иерархии выглядит так:
- Throwable — базовый класс для всех ошибок
- Error — серьёзные системные ошибки (StackOverflowError, OutOfMemoryError)
- Exception — исключения, которые мы должны обрабатывать
- **Checked Exceptions** — проверяемые исключения
- **Unchecked Exceptions** — непроверяемые исключения (RuntimeException)
1. Checked Exception (Проверяемые исключения)
Проверяемые исключения — это исключения, которые компилятор Java ТРЕБУЕТ обрабатывать. Они наследуются от Exception, но не от RuntimeException.
public class FileReader {
public static void readFile(String filename) throws FileNotFoundException {
File file = new File(filename);
if (!file.exists()) {
throw new FileNotFoundException("Файл не найден: " + filename);
}
}
}
public class Main {
public static void main(String[] args) throws FileNotFoundException {
try {
FileReader.readFile("data.txt");
} catch (FileNotFoundException e) {
System.out.println("Ошибка: " + e.getMessage());
}
}
}
Примеры checked exceptions:
- IOException и её подклассы
- FileNotFoundException
- SQLException
- ClassNotFoundException
2. Unchecked Exception (Непроверяемые исключения)
Непроверяемые исключения — это исключения, которые наследуются от RuntimeException. Компилятор НЕ требует их обработки, но рекомендуется это делать.
public class ArrayExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
try {
System.out.println(numbers[10]);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Индекс за границами массива");
}
String str = null;
try {
int length = str.length();
} catch (NullPointerException e) {
System.out.println("Объект null");
}
}
}
Примеры unchecked exceptions:
- NullPointerException
- ArrayIndexOutOfBoundsException
- IllegalArgumentException
- ClassCastException
- ArithmeticException
3. Error (Ошибки системы)
Errors — это серьёзные проблемы на уровне JVM, которые обычно НЕЛЬЗЯ восстановить.
public class ErrorExample {
public static void recursion() {
recursion();
}
public static void main(String[] args) {
try {
recursion();
} catch (StackOverflowError e) {
System.out.println("Переполнение стека");
}
}
}
Примеры errors:
- StackOverflowError
- OutOfMemoryError
- VirtualMachineError
4. Кастомные исключения
public class InsufficientFundsException extends Exception {
private double amount;
public InsufficientFundsException(String message, double amount) {
super(message);
this.amount = amount;
}
}
public class BankAccount {
private double balance = 1000;
public void withdraw(double amount) throws InsufficientFundsException {
if (amount > balance) {
throw new InsufficientFundsException(
"Недостаточно средств",
amount - balance
);
}
balance -= amount;
}
}
5. Try-With-Resources
public void readFile(String filename) throws IOException {
try (FileInputStream fis = new FileInputStream(filename)) {
// Ресурс автоматически закроется
}
}
Лучшие практики
- Ловите исключения максимально специфично — не используйте просто Exception
- Логируйте ошибки — всегда сохраняйте информацию об ошибке
- Не игнорируйте исключения — пустой catch блок это беда
- Используйте try-with-resources для очистки ресурсов
- Создавайте свои исключения для доменных ошибок приложения