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!