JavaRush /Курсы /JAVA 25 SELF /Синтаксис try-catch

Синтаксис try-catch

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

1. Зачем нужен try-catch?

Как вы уже знаете, в программировании ошибки случаются постоянно: деление на ноль, неправильный ввод, отсутствие файла и т. д. Если не обработать такие ситуации, программа завершится с ошибкой (аварийно).
Конструкция try-catch позволяет «поймать» исключение и предотвратить падение программы, аккуратно обработав ошибку.

Синтаксис конструкции try-catch

try 
{
    // Код, который может выбросить исключение
} 
catch (ТипИсключения имяПеременной) 
{
    // Код для обработки исключения
}

Пояснение:

  • try — «попробуй выполнить этот код».
  • catch — «если возникнет исключение указанного типа, обработай его здесь».

Как это работает?

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

2. Пример: деление на ноль

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

int a = 10;
int b = 0;
int result = a / b; // Здесь программа завершится с ошибкой!
System.out.println("Результат: " + result); // До сюда не дойдём

Результат:

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

С обработкой через try-catch

int a = 10;
int b = 0;

try 
{
    int result = a / b; // Здесь может возникнуть исключение
    System.out.println("Результат: " + result);
} 
catch (ArithmeticException e) 
{
    System.out.println("Ошибка: деление на ноль невозможно!");
}

System.out.println("Программа продолжила работу.");

Результат:

Ошибка: деление на ноль невозможно!
Программа продолжила работу.

Объяснение:

  1. Как только Java встречает деление на ноль, она «выбрасывает» исключение.
  2. try прерывается, и управление переходит в catch.
  3. После обработки ошибки программа продолжает выполнение.

3. Как работает блок catch

В скобках после catch указывается тип исключения (например, ArithmeticException) и имя переменной (обычно e).

Внутри блока catch можно узнать подробности об ошибке:

  • e.getMessage() — короткое описание ошибки.
  • e.printStackTrace() — подробная информация (для отладки).

Пример:

try 
{
    int[] arr = new int[2];
    int x = arr[10]; // Ошибка: индекса нет
} 
catch (ArrayIndexOutOfBoundsException e) 
{
    System.out.println("Ошибка: " + e.getMessage()); // Выводим имя ошибки
    e.printStackTrace();                             // Печатаем в консоль всю информацию об ошибке
}

4. Поток выполнения при исключении

Если в блоке try нет ошибок — блок catch пропускается.

Если в блоке try возникла ошибка — выполнение блока прерывается в месте ошибки, и управление сразу переходит в первый подходящий catch. Всё, что после ошибки в try, уже не выполнится!

Иллюстрация:

try 
{
    System.out.println("1. Начало try");
    int a = 10 / 0;                        // Ошибка!
    System.out.println("2. После деления"); // Не выполнится
} 
catch (ArithmeticException e) 
{
    System.out.println("3. В блоке catch");
}
System.out.println("4. После try-catch");

Результат:

1. Начало try
3. В блоке catch
4. После try-catch

5. Типичные ошибки при использовании try-catch

Ошибка № 1: Слишком широкий catch.
Если использовать catch (Exception e), вы можете перехватить кучу неожиданных ошибок, которые не умеете корректно обрабатывать.
Решение: ловите только те исключения, которые реально ожидаются в данном месте (например, IOException, SQLException).

Ошибка № 2: Пустой catch.
Писать catch (Exception e) {} — значит скрыть проблему. Программа упадёт в другом месте или будет вести себя странно.
Решение: хотя бы залогируйте ошибку (e.printStackTrace() или логгер).

Ошибка № 3: Вера в то, что try-catch исправит любую проблему.
Если ошибка в логике программы (например, деление на ноль, неверный алгоритм) — никакой try-catch не поможет.
Решение: используйте try-catch только для действительно ожидаемых ситуаций, а не для маскировки багов.

1
Задача
JAVA 25 SELF, 11 уровень, 2 лекция
Недоступна
Надежный робот-исследователь 🤖
Надежный робот-исследователь 🤖
1
Задача
JAVA 25 SELF, 11 уровень, 2 лекция
Недоступна
Ошибочный запрос к рюкзаку героя 🛡️
Ошибочный запрос к рюкзаку героя 🛡️
1
Задача
JAVA 25 SELF, 11 уровень, 2 лекция
Недоступна
Диагностика проблемы в системе подсчета 📈
Диагностика проблемы в системе подсчета 📈
1
Задача
JAVA 25 SELF, 11 уровень, 2 лекция
Недоступна
Система управления критической миссией 🚀
Система управления критической миссией 🚀
Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
rwnmei Уровень 45
16 августа 2026
Мне кажется не плохо было бы добавить к этим задачам какие нибудь else-if,while,Массивы,Циклы и тд. сейчас это выглядит как что то из разряда Выведите

"Hello world"
на экран
Слишком постно
катюха Уровень 11
20 мая 2026
хм,зачем он нужен,если баг нужно все равно чинить,а не оставлять как есть
Gans Electro Уровень 42
7 июня 2026
Вы немного неправильно мыслите. Вот работает программа. Она иногда обращается на сервис где висит база данных. Сама база данных может не иметь каких то данных сейчас, или быть недоступной. Без логики try, catch ваша программа когда обратится к сервису просто упадет без всякой совести. Вы бы могли просто настроить так что, если приходит ошибка то обращаться через каждый час, пока не получите результат. Это немного лезет в архитектуру, микросервисы и асинхронные обработки. В вашей программе много разделов и клиентов. Не рабочий один раздел не должен влиять на другой. Да и не всегда то место откуда приходит ошибка написана вами, очень часто это вообще сторонние сервисы. Да и не все баги вы можете чинить. Да и не все баги это баги. Вот упала база данных, что вы можете поделать. Только пытаться в try catch
Александр Уровень 1
22 января 2026
.
Ksanders Уровень 32
14 октября 2025
В задаче 3 в условии упоминается переменная numberOfPlayers, которую по идее надо использовать (если следовать логике прошлых задач). Но в требованиях и в правильном решении она почему-то не фигурирует.