Sobes.tech
Junior
102
questionbank

Что такое исключение (Exception) в Java?

Ответ от нейросети

sobes.tech AI

Исключение — это событие, которое нарушает нормальный поток выполнения программы. Оно представляет собой ошибку или непредвиденную ситуацию.

В Java исключения представлены иерархией классов, начинающейся с Throwable. Она разделяется на:

  • Error: Представляет серьезные проблемы, от которых обычно нельзя оправиться (например, нехватка памяти OutOfMemoryError).
  • Exception: Представляет условия, от которых программа может попытаться оправиться. Делится на:
    • Checked Exceptions: Исключения, которые должны быть обработаны или объявлены в сигнатуре метода. Компилятор проверяет их наличие (например, IOException, FileNotFoundException).
    • Unchecked Exceptions (Runtime Exceptions): Исключения, которые не нужно обрабатывать или объявлять явно. Они обычно указывают на ошибки в логике программы (например, NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException).

Механизм обработки исключений включает:

  1. try: Блок кода, который может выбросить исключение.
  2. catch: Блок, который перехватывает и обрабатывает определенный тип исключения.
  3. finally: Блок, который выполняется всегда, независимо от того, было ли выброшено исключение или нет. Используется для освобождения ресурсов.
  4. throw: Используется для явного выброса исключения.
  5. throws: Объявляется в сигнатуре метода, чтобы указать, что метод может выбросить определенное исключение.

Пример обработки исключения:

// Пример обработки Checked Exception
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ExceptionHandlingExample {

    public static void main(String[] args) {
        try {
            readFile("nonexistent_file.txt");
        } catch (FileNotFoundException e) {
            // Обработка исключения
            System.err.println("Ошибка: файл не найден.");
            e.printStackTrace(); // Вывод информации об исключении
        } finally {
            // Этот блок выполнится всегда
            System.out.println("Завершение попытки чтения файла.");
        }

        // Пример Unchecked Exception (ArithmeticException)
        try {
            int result = 10 / 0; // Попытка деления на ноль
        } catch (ArithmeticException e) {
            System.err.println("Ошибка деления на ноль!");
        }
    }

    // Метод, который может выбросить Checked Exception
    public static void readFile(String filename) throws FileNotFoundException {
        File file = new File(filename);
        Scanner scanner = new Scanner(file);
        // Чтение файла...
        scanner.close();
    }
}