У цьому підручнику ми навчимось використовувати ключове слово throw і throws для обробки винятків за допомогою прикладів.
У Java винятки можна поділити на два типи:
- Unchecked Виняток: Вони не перевіряються під час компіляції , але при обкатці time.for наприклад:
ArithmeticException,NullPointerException,ArrayIndexOutOfBoundsException, винятків поErrorкласу, і т.д. - Перевірені винятки: вони перевіряються під час компіляції. Так , наприклад,
IOException,InterruptedExceptionі т.д.
Зверніться до винятків Java, щоб детально дізнатись про перевірені та неперевірені винятки.
Зазвичай нам не потрібно обробляти неперевірені винятки. Це тому, що неперевірені винятки трапляються через помилки програмування. І хороша практика - виправляти їх, а не обробляти.
Цей підручник тепер буде зосереджений на тому, як обробляти перевірені винятки за допомогою throwта throws.
Java кидає ключове слово
Ми використовуємо throwsключове слово в декларації методу, щоб оголосити тип винятків, які можуть виникнути в ньому.
Його синтаксис:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code )
Як ви можете бачити з наведеного синтаксису, ми можемо використовувати throwsдля оголошення декілька винятків.
Приклад 1: Java кидає ключове слово
import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) )
Вихідні дані
java.io.FileNotFoundException: test.txt (Немає такого файлу або каталогу)
Коли ми запускаємо цю програму, якщо файл test.txtне існує, FileInputStreamвидається a, FileNotFoundExceptionщо розширює IOExceptionклас.
Якщо метод не обробляє винятки, тип винятків, які можуть виникнути в ньому, повинен бути вказаний у throwsпункті, щоб методи, що знаходяться в стеку викликів, могли обробляти їх або вказувати за допомогою throwsсамих ключових слів.
findFile()Метод визначає , що IOExceptionможе бути викинутий. main()Метод викликає цей метод і обробляє виключення , якщо вона кинута.
Викидання кількох винятків
Ось як ми можемо створити кілька винятків за допомогою throwsключового слова.
import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) )
Тут findFile()метод визначає , що він може кинути NullPointerException, IOExceptionі InvalidClassExceptionв своїй throwsстатті.
Зверніть увагу, що ми не обробляли NullPointerException. Це тому, що це неперевірений виняток. Не потрібно вказувати це в throwsпункті та обробляти.
кидає ключове слово проти спробувати … зловити … нарешті
Методів, які можуть спричинити винятки, може бути декілька. Написання try… catchдля кожного методу буде нудним, а код стає довгим і менш читабельним.
throws також корисний, коли ви позначили виняток (виняток, який потрібно обробити), який ви не хочете вловлювати у своєму поточному методі.
Ключове слово Java
throwВикористовується ключове слово явно кинути один виняток.
Коли виникає виняток, потік виконання програми передається від tryблоку до catchблоку. Ми використовуємо throwключове слово в межах методу.
Його синтаксис:
throw throwableObject;
Об’ємний об’єкт - це екземпляр класу Throwableабо підкласу Throwableкласу.
Приклад 2: Ключове слово Java
class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Вихідні дані
Виняток у потоці "main" java.lang.ArithmeticException: Спроба розділити на 0 на Main.divideByZero (Main.java:3) у Main.main (Main.java:7) статус виходу 1
У цьому прикладі ми явно кидаємо ArithmeticException.
Примітка: ArithmeticException є неперевіреним винятком. Зазвичай не потрібно обробляти неперевірені винятки.
Приклад 3: Викидання перевіреного винятку
import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) )
Вихідні дані
Файл не знайдено
findFile()Метод кидає IOExceptionз повідомленням ми передали в конструктор.
Зверніть увагу, що оскільки це перевірений виняток, ми повинні вказати його в throwsпункті.
Методи, які викликають цей findFile()метод, повинні або обробляти цей виняток, або вказувати його за допомогою throwsключового слова самі.
Ми розглянули цей виняток у main()методі. Потік виконання програми передається з tryблоку в catchблок, коли виникає виняток. Отже, решта коду в tryблоці пропускається, а оператори в catchблоці виконуються.








