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

Какие виды ошибок знаешь?

1.0 Junior🔥 271 комментариев
#Основы Java

Комментарии (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)) {
        // Ресурс автоматически закроется
    }
}

Лучшие практики

  1. Ловите исключения максимально специфично — не используйте просто Exception
  2. Логируйте ошибки — всегда сохраняйте информацию об ошибке
  3. Не игнорируйте исключения — пустой catch блок это беда
  4. Используйте try-with-resources для очистки ресурсов
  5. Создавайте свои исключения для доменных ошибок приложения