Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Что такое Exception в Java?

Exception в Java — это событие, прерывающее выполнение инструкций программы, нарушающее нормальный поток управления. Это объект, инкапсулирующий информацию об ошибке, возникшей внутри метода и переданной в систему времени выполнения. В Java исключения в основном сигнализируют об условиях ошибок, которые не могут быть обработаны стандартным потоком управления.

В этом уроке вы узнаете:

Ошибки в Java делятся на две большие категории:

  1. Ошибки компиляции (Compile-time errors)
  2. Ошибки времени выполнения (Runtime errors)

Ошибки компиляции можно дополнительно разделить на:

Пример синтаксической ошибки:

Объявление int a; верно, но запись in a; заставит компилятор сообщить об ошибке.

Например, объявление int a; один раз, а затем попытка повторно объявить int a; позже в той же области видимости вызовет ошибку компилятора, которая подсветится во время сборки.

Пример ошибки времени выполнения

Ошибки времени выполнения проявляются как исключения — события, прерывающие нормальный поток выполнения. Типичные примеры включают ArithmeticException, NullPointerException и деление на ноль.

Эти исключения возникают из условий, выходящих за пределы прямого контроля разработчика.

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Зачем нужна обработка исключений?

Рассмотрим программу, обращающуюся к удаленному серверу. Во время разработки сервер доступен, и код работает гладко. В продакшене сервер может быть недоступен, вызывая исключение при попытке подключения.

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Полагаться только на естественный поток кода недостаточно. Надежные программы предусматривают исключительные условия и восстанавливаются из них грациозно.

Как обрабатывать исключения

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

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Использование традиционных конструкций if-else для обработки нескольких типов исключений быстро становится громоздким:

class Connect {
    if (serverIsUp()) {
        // подключиться к основному серверу
    } else {
        // подключиться к резервному серверу
    }
}

Блок Try-Catch

Java предоставляет встроенные механизмы для обработки исключений. Код, который может выбросить исключение, помещается внутри блока try, а соответствующий код восстановления — внутри одного или нескольких блоков catch.

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Например, блок try может попытаться подключиться к основному серверу, а блок catch обработает логику отката.

Когда сервер работает, блок catch пропускается; когда сервер недоступен, выбрасывается исключение, и выполняется блок catch.

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Синтаксис пары try-catch:

try {
    // операторы, которые могут выбросить исключение
} catch (ExceptionType name) {
    // операторы восстановления
}

Практический пример

Шаг 1: Скопируйте следующий код в вашу IDE.

class JavaException {
    public static void main(String args[]) {
        int d = 0;
        int n = 20;
        int fraction = n / d; // выбросит ArithmeticException
        System.out.println("End Of Main");
    }
}

Шаг 2: Скомпилируйте и запустите. Программа выбрасывает ArithmeticException и завершается на строке 5.

Шаг 3: Измените код для использования try-catch:

class JavaException {
    public static void main(String args[]) {
        int d = 0;
        int n = 20;
        try {
            int fraction = n / d;
            System.out.println("This line will not be executed");
        } catch (ArithmeticException e) {
            System.out.println("Caught exception: " + e);
        }
        System.out.println("End Of Main");
    }
}

Шаг 4: Скомпилируйте и запустите снова. Вывод показывает, что исключение обработано грациозно, и программа продолжается до финального оператора печати.

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Пойманный объект ArithmeticException e содержит подробную информацию, которую можно использовать для логирования или восстановления.

Иерархия классов исключений

Иерархия исключений Java происходит от класса Throwable, у которого два прямых подкласса: Error и Exception. Error представляет невосстанавливаемые условия (например, OutOfMemoryError), в то время как Exception охватывает условия, которые можно обработать программно.

Мастерство обработки исключений в Java: Try-Catch, Finally и иерархия классов

Пример вложенного Try-Catch

Скопируйте следующий код:

class JavaException {
    public static void main(String args[]) {
        try {
            int d = 1;
            int n = 20;
            int fraction = n / d;
            int g[] = {1};
            g[20] = 100; // ArrayIndexOutOfBoundsException
        } catch (ArithmeticException e) {
            System.out.println("Caught ArithmeticException: " + e);
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Caught ArrayIndexOutOfBoundsException: " + e);
        }
        System.out.println("End Of Main");
    }
}

Когда d равно 1, код выбрасывает ArrayIndexOutOfBoundsException. Изменение d на 0 вызывает ArithmeticException. Раскомментирование широкого catch (Exception e) вызовет ошибку компиляции, так как оно затеняет более специфические обработчики.

Блок Finally

Блок finally выполняется независимо от того, произошло ли исключение, что делает его идеальным для задач очистки.

try {
    // рискованные операции
} catch (ExceptionType e) {
    // обработка ошибки
} finally {
    // действия по очистке
}

Пример:

class JavaException {
    public static void main(String args[]) {
        try {
            int d = 0;
            int n = 20;
            int fraction = n / d;
        } catch (ArithmeticException e) {
            System.out.println("Caught exception: " + e);
        } finally {
            System.out.println("Inside the finally block");
        }
    }
}

Запуск этой программы выводит сообщение из блока finally, даже если выбрасывается исключение. Изменение d на 1 устраняет исключение; блок finally все равно выполняется.

Резюме:

java

  1. Обработка исключений в Python: try, except, else и finally подробно
  2. Обработка исключений в Java: try, catch, finally, throw и throws
  3. Обработка исключений в Java: try-catch-finally и try-with-resources
  4. Мульти-исключения в Java: перехват нескольких исключений в одном catch блоке
  5. Обработка исключений в C++: практические примеры try, catch, throw
  6. Понимание String.charAt() в Java: синтаксис, возвращаемый тип, исключения и пример
  7. Освоение String.endsWith() в Java: проверка суффиксов строки с примерами
  8. Чтение файлов в Java с BufferedReader — Практическое руководство с примерами
  9. Алгоритм сортировки вставками в Java: понятный пример и пошаговое руководство
  10. Мастерство обработки исключений в Python: эффективное использование try, except, finally и raise