November 23, 2021

Обработка Exception в Java ч 1. Try catch finally.

Что такое исключение?

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

Если простыми словами, то эта "штука" которая "ломает" стек:

Почему возникает исключение?

Исключение может возникнуть по нескольким причинам, таким как проблема с сетевым соединением, неправильный ввод данных пользователем, открытие несуществующего файла в вашей программе и т.д.

Блоки и ключевые слова, используемые для обработки исключений

  • try содержит код, в следствии которого может прилететь исключение.
  • catch : за блоком try следует блок catch, который обрабатывает исключение, возникающее в связанном блоке try.
  • finally: Выполняется после блока catch. Блок срабатывает вне зависимости от того, было исключение или нет. Грубо говоря перед тем как покинуть try catch, всегда сработает finally. Если в try прилетело исключение и блок catch отсутствовал, код находящийся в finally выполнится и исключение полетит дальше.

Если нет блока catch:

Примеры кода

Пример 1:

public class Test00 {
    public static void main(String[] args) {
        System.err.println("one:before");
        try {
            one();
        } finally {
            System.err.println("one:finally");
        }
        System.err.println("one:after");
    }
    public static void one(){
        System.err.println("two:before");
        try {
            two();
        } catch (Error e) {
            System.err.println("two:catch");
        }
        System.err.println("two:after");
    }
    public static void two(){
        throw new Error();
    }

}

Консоль

one:before
two:before
two:catch
two:after
one:finally
one:after

Пример 2:

public class Test01 {
    public static void main(String[] args) {
        System.err.println("one:before");
        one();
        System.err.println("one:after");
    }

    public static void one() {
        System.err.println("two:before");
        try {
            two();
        } finally {
            System.err.println("two:finally");
        }
        System.err.println("two:after");
    }

    public static void two() {
        throw new Error();
    }

}

Консоль

one:before
two:before
two:finally
Exception in thread "main" java.lang.Error

Пример 3:

public class Test03 {
    public static void main(String[] args) {
        System.err.println("one:before");
        try {
            one();
        } catch (Error e) {
            System.err.println("one:catch");
        }
        System.err.println("one:after");
    }

    public static void one() {
        System.err.println("two:before");
        try {
            two();
        } catch (Error e) {
            System.err.println("two:catch");
        }
        System.err.println("two:after");
    }

    public static void two() {
        throw new Error();
    }

}

Консоль

one:before
two:before
two:catch
two:after
one:after

Содержание

Часть 2 --->