Java Exceptions

Оновлено: 22.05.2023

Винятки Java

Під час виконання Java-коду можуть виникати різні помилки: помилки кодування, допущені програмістом, помилки через неправильне введення або інші непередбачувані речі.

Коли виникає помилка, Java зазвичай зупиняється і видає повідомлення про помилку. Технічний термін для цього такий: Java створить виняток (згенерує помилку).

Java спробувати і зловити

Оператор try дозволяє визначити блок коду, який буде перевірено на наявність помилок під час його виконання.

Оператор catch дозволяє визначити блок коду, який буде виконано, якщо в блоці try виникне помилка.

Спроби зловити ключові слова йдуть парами:

try {
  //  Block of code to try
}
catch(Exception e) {
  //  Block of code to handle errors
}

Розглянемо наступний приклад:

Це призведе до помилки, оскільки myNumbers[10] не існує.

public class Main {
  public static void main(String[ ] args) {
    int[] myNumbers = {1, 2, 3};
    System.out.println(myNumbers[10]); // error!
  }
}

На виході вийде щось на кшталт цього:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Main.main(Main.java:4)

Якщо виникає помилка, ми можемо використати try...catch, щоб перехопити помилку і виконати деякий код для її обробки:

public class Main {
  public static void main(String[ ] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

На виході буде:

Something went wrong.

Нарешті

Оператор finally дозволяє виконувати код після try...catch незалежно від результату:

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

На виході буде:

Something went wrong.
The 'try catch' is finished.

Ключове слово throw

Оператор throw дозволяє створити власну помилку.

Оператор throw використовується разом з типом виключення. У мові Java існує багато типів винятків: ArithmeticException, FileNotFoundException, ArrayIndexOutOfBoundsException, SecurityException тощо:

Згенерувати виключення, якщо вік менше 18 років (вивести "Access denied"). Якщо вік 18 або більше, виведіть "Access granted":

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    }
    else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // Set age to 15 (which is below 18...)
  }
}

На виході буде:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
        at Main.checkAge(Main.java:4)
        at Main.main(Main.java:12)

Якби вік був 20 років, ви не отримали б винятку:

checkAge(20);

На виході буде:

Access granted - You are old enough!