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 лекция
Недоступна
Система управления критической миссией 🚀
Система управления критической миссией 🚀
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ksanders Уровень 32
14 октября 2025
В задаче 3 в условии упоминается переменная numberOfPlayers, которую по идее надо использовать (если следовать логике прошлых задач). Но в требованиях и в правильном решении она почему-то не фигурирует.