JavaRush /Курсы /Java Syntax /Как работают исключения

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

Java Syntax
9 уровень , 5 лекция
Открыта
Как работают исключения - 1

— Хочу рассказать тебе немного о том, как работают исключения. Приведённый ниже пример будет показывать примерную логику работы:

Код с использованием исключений
class ExceptionExampleOriginal
{


    public static void main(String[] args)
    {
        System.out.println("main begin");
        try
        {
            System.out.println("main before call");

            method1();



            System.out.println("main after call");
        }
    catch (RuntimeException e)
        {


            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();

        System.out.println("method1 end");
    }

    public static void method2()
    {
      System.out.println("method2");
      String s = "Message: Unknown Exception";
     throw new RuntimeException(s);

    }
}
Примерная расшифровка
 public class ExceptionExample
{
 private static Exception exception = null;

   public static void main(String[] args)
    {
        System.out.println("main begin");

       
        System.out.println("main before call");

        method1();

        if (exception == null)
        {
            System.out.println("main after call");
        }
        else if (exception instanceof RuntimeException)
        {
            RuntimeException e = (RuntimeException) exception; exception = null;
            String s = e.getMessage();
            System.out.println(s);
        }
        System.out.println("main end");
    }

    public static void method1()
    {
        System.out.println("method1 begin");
        method2();
        if (exception != null) return;
        System.out.println("method1 end");
    }

    public static void method2()
    {
        System.out.println("method2");
        String s = "Message: Unknown Exception";
        exception = new RuntimeException(s); return;
    }
}

— Ничего не понятно.

— Ок. Давай я тебе объясню, что происходит.

— В примере слева мы по цепочке вызываем несколько методов. В method2 мы специально создаем и выкидываем исключение (инициируем ошибку).

— В примере справа показано, что примерно при этом происходит.

— Посмотри на method2. Создание исключения превратилось вот во что: создали объект типа RuntimeException, сохранили его в специальную переменную exception и тут же вышли из метода – return.

— В методе method1, после вызова method2 стоит проверка – есть исключение или нет, если исключение есть, тогда метод method1 тут же завершается. Такая проверка неявно производится после вызова каждого(!) метода в Java.

— Ого!

— Вот тебе и ого.

— В колонке справа в методе main я написал, что примерно происходит при перехвате исключения с помощью конструкции try-catch. Если исключения не было, то все продолжает работать, как и запланировано. Если исключение было, и оно было такого типа, как указано в catch, тогда мы его обрабатываем.

— А что значит throw и instanceof?

– Посмотри на последнюю строку throw new RuntimeException(s). Таким способом мы создаем и кидаем исключение. Пока мы так делать не будем. Это только для примера.

— А с помощью команды «а instanceof B» мы проверяем, имеет ли объект a тип B. Т.е. имеет ли объект, который хранится в переменной exception, тип RuntimeException. Это логическое условие.

— Ну, вроде понятно. Немного.

9
Задача
Java Syntax Pro, 9 уровень, 5 лекция
Недоступна
Побитовые операции
Закомментируй ненужные строки кода, чтобы на экран вывелась цифра 5. Примечание: нужно закомментировать только две строки.
9
Задача
Java Syntax Pro, 9 уровень, 5 лекция
Недоступна
Swap по-новому
В классе Pair реализуй метод swap() так, чтобы он менял местами значения переменных x и y. Можно использовать только операции: 1. Исключающее или. 2. Присваивание. 3. Исключающее или с присваиванием. Не оставляй комментарии, не меняй остальной код.
Комментарии (189)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анна Луханина Уровень 15
6 июля 2025
Здесь не хватает важной информации для понимания. Обработка исключения ≠ выбрасывание исключения throw - выбрасывает исключение. try/catch - обрабатывает его. Если для выброшенного исключения нет try/catch в текущем методе - исключение идёт дальше вверх по стеку, где ищет обработчик
AlinaY Уровень 20
6 апреля 2023
По сравнению с другими лекциями эта написана неразборчиво, несистемно и непонятно. Все объяснение темы изучала на других источниках
Larvixx Уровень 17
27 февраля 2023
— Ого! — Вот тебе и ого.
White Rabbit Уровень 22
4 октября 2022
А почему в приведённом примере method1 не пробрасывает исключение наверх, в main?
ivankoffpavel Уровень 19
20 июля 2023
V main est block try - cath kotorij obrabativaet
worried-cell Уровень 24
28 августа 2022
Уровень лекции крайне высок для текущего уровня) И это хорошо)
xxxx Уровень 23
11 января 2023
мало понятного. и это плохо
Lo Уровень 35 Expert
11 июля 2023
Читала эту лекцию после книжки Шилдта, как по маслу))) он так разжевал про исключения, просто слов нет! Единственное что я заметила отличие, в его книге переменная называется exc, а тут просто е, наверно изменили в новой версии Java,в книге описывали Java8.
Максим Уровень 22 Expert
26 сентября 2023
вы можете называть обьект как угодно,главное чтобы он был обьектом класса конкретной ошибки или же общего родителя (Exception)
Lo Уровень 35 Expert
29 сентября 2023
спасибо, я почему то думала,что эта переменная уже создана и я к ней общаясь, а не создаю сама. Поэтому меня удивило,что по разному написанно. Ну это было пару месяцев назад, сейчас я более менее разобралась с исключениями.
Максим Уровень 22 Expert
29 сентября 2023
Это хорошо,удачи вам в обучении!)
Евгений N Уровень 23
20 апреля 2022
как расширить таблички с кодом? при уменьшении масштаба таблички тоже уменьшаются! 😢 в итоге справа слева по 10 см пустые поля, а код в табличках не помешается - требует горизонтальной прокрутки, которая снизу и уже даже не видна (требуется сначала вертикальная прокрутка) 😢 😢
Roman Kharitonov Уровень 20 Expert
3 июля 2022
Как вариант, проинспектировать элемент, найти div class="row compare" и задать ему явно ширину в 1600 пикселей.

style="width: 1600px;"
Nikita Prokaev Уровень 23
14 июля 2022
Расширить, без танцев с бубном, никак. Тебе поможет Shift + колесо мыши.
Евгений N Уровень 23
18 июля 2022
Shift + колесо мыши = просто сдвиг текста влево-вправо = стрелки влево-вправо, удобнее конечно чем за горизонтальный ползунок снизу тягать, но пустое место на экране не используется 😂 . Браузеры: Яндекс, Хром.
Максим Уровень 23
24 августа 2022
Здорово!!! спс:)
Александр Уровень 21
8 декабря 2021
method2 не скомпилируется в правом примере, он void - там не может быть возврат значений return )))
Ruvino Уровень 8
12 января 2022
Насколько я знаю, в этом случае "return" выступает как "break" в цикле. В Богоподобной одинэсинке в процедурах (которые ничего не возвращают), можно писать ключевое слово "возврат". Код просто прекратит работать.
WriturX [Andrij] Уровень 16
19 января 2022
Опять таки, можно. Проверяйте! =) только после слова return ставьте сразу точку с запятой и никакого значения больше. Вы будете удивлены)
Aleksei Reinsalu Уровень 19
20 ноября 2021
Оно вроде бы и просто если брать задействованный программный язык, но проясняет ход мыслей программистов со стажем и о чем они говорят на своем жаргоне.
gypsy potassium Уровень 19 Expert
15 сентября 2021
Всё бы хорошо, но хочется чтобы сайт, обучающий программированию мог подстраиваться под ширину экрана. Сижу на 22 дюймовом монике, пол-экрана пустые. Зато материал в узеньких полях, которые надо вправо-влево двигать. 👍
Вилюян Уровень 11
26 декабря 2021
согласен, исправили бы они это
Евгений N Уровень 23
20 апреля 2022
"которые надо вправо-влево двигать" до 29 строк еще ничего, "двигалка" на том же листе, а здесь сначала надо до нее прокрутиться, потом сдвинуть, потом прокрутить назад.
Алексей Кобзев Уровень 37
25 июня 2022
Друзья, используйте стрелочки на клавиатуре)
Евгений N Уровень 23
27 июня 2022
частично стрелочки помогают, но всё равно не особо, к тому же они не передвигают оба окна, как в программах-сравнялках текста (Merge и т.п.)! ну и это абсурдно, что-то двигать, когда слева справа пустые поля по 40% от окон с текстом.
Инна Уровень 29
25 августа 2021
а почему в примере того, как всё работает, выход из метода это return? В void методе и без значения
za4emyavam Уровень 37
31 августа 2021
Если требуется выйти из метода досрочно - можно использовать return без значения. А в данном случае это только пример, что после throw идёт сразу выход из метода.