JavaRush /Курсы /JAVA 25 SELF /Введение в обработку исключений

Введение в обработку исключений

JAVA 25 SELF
11 уровень , 1 лекция
Открыта

1. Знакомство с исключениями

Давайте начнем с простой аналогии. Представьте, что ваша программа — это автомобиль, который едет по дороге. Всё хорошо, пока вдруг не случается что-то неожиданное: спустило колесо, закончился бензин, перегрелся двигатель. Если не "обработать" эту ситуацию (например, не поставить запаску или не заправиться), машина остановится и дальше не поедет. Точно так же и в программе: если не обработать исключение, программа аварийно завершится.

Исключение (exception) — это объект, который создается в момент возникновения какой-то проблемы во время выполнения программы. Исключение сообщает: «Стоп! Что-то пошло не так!»

Примеры ситуаций, когда возникают исключения:

  • Деление на ноль (10 / 0)
  • Попытка обратиться к несуществующему элементу массива (arr[999])
  • Открытие файла, которого нет на диске
  • Преобразование строки "abc" в число (Integer.parseInt("abc"))

Важно: Исключения — это не ошибки компиляции (например, опечатки в коде), а проблемы, которые возникают уже во время работы программы.

Почему исключения — это хорошо?

  • Чистый код: Основная логика программы не засоряется постоянными проверками на каждую мелочь.
  • Гибкость: Можно централизованно обрабатывать ошибки (например, все ошибки чтения файлов — в одном месте).
  • Надёжность: Программа не «падает» с загадочным сообщением, а сообщает, что именно случилось.

2. Исключения (Exceptions) vs Ошибки (Errors)

В Java есть два основных типа проблем, которые могут возникнуть во время работы программы:

Ошибки (Errors)

Ошибки — это фатальные, невосстановимые проблемы, которые возникают из-за сбоев в работе самой виртуальной машины Java (JVM). Обычно они связаны с ресурсами компьютера или внутренними сбоями JVM.

Примеры ошибок:

  • OutOfMemoryError — закончилась память.
  • StackOverflowError — переполнение стека (например, из-за бесконечной рекурсии).

Важно: Такие ошибки обычно не стоит пытаться обрабатывать в программе.

Исключения (Exceptions)

Исключения — это проблемы, с которыми программа может (и должна) справиться. Они возникают из-за ошибок в логике программы или из-за внешних факторов (например, пользователь ввёл не то, что ожидалось).

Примеры исключений:

  • NullPointerException — попытка использовать null как объект.
  • ArrayIndexOutOfBoundsException — выход за пределы массива.
  • IOException — ошибка при работе с файлами.

Исключения в Java бывают двух видов:

  • Checked exceptions (проверяемые) — компилятор требует их обработать (например, IOException).
  • Unchecked exceptions (непроверяемые) — компилятор не требует их обработки (например, NullPointerException).

Схема: где что находится

graph TD
    Throwable --> Error
    Throwable --> Exception
    Exception --> RuntimeException
    Exception --> Checked["(другие Exceptions)"]

    style Throwable fill:#ffa64d,color:#000
    style Exception fill:#ffa64d,color:#000
    style Checked fill:#ffa64d,color:#000
    style Error fill:#ff4d4d,color:#fff
    style RuntimeException fill:#4dff88,color:#000

Пояснение:

  • Throwable — корень всей иерархии ошибок и исключений в Java.
  • Error — фатальные ошибки JVM, не обрабатываются.
  • Exception — «нормальные» исключения, которые можно и нужно обрабатывать.
  • RuntimeException — непроверяемые исключения (ошибки программиста).

3. Как это выглядит в коде?

Пример 1: Деление на ноль

public class ExceptionDemo 
{
    public static void main(String[] args) 
    {
        int a = 10;
        int b = 0;
        int c = a / b; // Здесь возникнет ArithmeticException!
        System.out.println("Результат: " + c);
    }
}

Что произойдет?
Программа завершится с ошибкой, и вы увидите сообщение:

Exception in thread "main" java.lang.ArithmeticException: / by zero
    at ExceptionDemo.main(ExceptionDemo.java:5)

Пример 2: Обращение к несуществующему элементу массива

int[] arr = {1, 2, 3};
System.out.println(arr[10]); // ArrayIndexOutOfBoundsException

Пример 3: Работа с файлами

import java.io.FileReader;
import java.io.IOException;

public class FileDemo 
{
    public static void main(String[] args) throws IOException 
    {
        FileReader reader = new FileReader("nofile.txt");     // FileNotFoundException (checked)
        int data = reader.read();
        System.out.println(data);
        reader.close();
    }
}

А вот как красиво обрабатывать такие исключительные ситуации мы сейчас и разберем.

1
Задача
JAVA 25 SELF, 11 уровень, 1 лекция
Недоступна
Зорг-калькулятор и великое деление на ноль 🌌
Зорг-калькулятор и великое деление на ноль 🌌
1
Задача
JAVA 25 SELF, 11 уровень, 1 лекция
Недоступна
Поиск несуществующего кристалла в рюкзаке 🎒
Поиск несуществующего кристалла в рюкзаке 🎒
1
Задача
JAVA 25 SELF, 11 уровень, 1 лекция
Недоступна
Возраст игрока: "двадцать" вместо 20 🎮
Возраст игрока: "двадцать" вместо 20 🎮
1
Задача
JAVA 25 SELF, 11 уровень, 1 лекция
Недоступна
Отсутствующее имя секретного агента 🤫
Отсутствующее имя секретного агента 🤫
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
C0N5P1RACY Уровень 21
20 ноября 2025
Проблема этого курса в том, что задачи не то что бы простые (нет, они простые!), а в том, что после пройденной темы, и практики этой темы в заданиях, мы больше не возвращаемся к этим вещам в задачах, задачи изначально построены так, что мы используем только одну тему, забывая про все остальное. Лично у меня, из за недостаточной практики, уже давно забылись многие вещи которые были пару уровней назад, так как я их просто не использую. Я решаю задачи отдельно от JavaRush, и даже так не все вспоминаю.
Vlad Privalov Уровень 11
29 ноября 2025
согласен😋
17 декабря 2025
100%. Задачи чисто на "повторим то, о чем прочитали в лекции". Я думал это только на первых уровнях, но похоже весь курс такой.
C0N5P1RACY Уровень 21
17 декабря 2025
Весь курс такой. Я перешел на старый курс.
Роман Фролков Уровень 29
24 декабря 2025
На старом тоже простые задачи
C0N5P1RACY Уровень 21
25 декабря 2025
Они там хотя бы интереснее, да и попадаются иногда задачи над которыми надо подумать Реализация метода add в LinkedList например
Gemini Уровень 12
2 ноября 2025
Не понятно почему задачи проще простого, а ставят медиум.
Xaxatumba Уровень 38
6 ноября 2025
За то как самооценка повышается. Решил задачу "MEDIUM" и вырос в своих глазах )