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 лише для справді очікуваних ситуацій, а не для маскування помилок.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ