У цьому підручнику ми навчимось використовувати ключове слово 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
блоці виконуються.