Перевірені та неперевірені винятки в Java
У Java, виняток це небажана або неочікувана подія, яка відбувається під час виконання програми, тобто під час виконання, що порушує нормальний потік інструкцій програми.
У Java є два типи винятків:
- Перевірені винятки
- Неперевірені винятки
Перевірені винятки в Java
Ці це винятки, які перевіряються під час компіляції. Якщо якийсь код у межах методу створює перевірений виняток, тоді метод повинен або обробити виняток, або він має вказати виняток за допомогою кидки ключове слово . У перевірених винятках існує два типи: повністю перевірені та частково перевірені винятки. Повністю перевірений виняток — це перевірений виняток, де також перевіряються всі його дочірні класи, наприклад IOException і InterruptedException. Частково перевірений виняток — це перевірений виняток, де деякі з його дочірніх класів не позначено, як Виняток.
Наприклад, розглянемо таку програму Java, яка відкриває файл у розташуванні C: esta.txt і друкує його перші три рядки. Програма не компілюється, оскільки функція main() використовує FileReader(), а FileReader() генерує перевірений виняток FileNotFoundException . Він також використовує методи readLine() і close(), і ці методи також викидають перевірений виняток IOException
приклад:
Java
// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException occurred> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Reading file from path in local directory> > FileReader file => new> FileReader(> 'C: esta.txt'> );> > // Creating object as one of ways of taking input> > BufferedReader fileInput => new> BufferedReader(file);> > // Printing first 3 lines of file 'C: esta.txt'> > for> (> int> counter => 0> ; counter <> 3> ; counter++)> > System.out.println(fileInput.readLine());> > // Closing file connections> > // using close() method> > fileInput.close();> > }> }> |
Вихід:
Щоб виправити наведену вище програму, нам потрібно або вказати список винятків за допомогою throws, або нам потрібно використати блок try-catch. Ми використовували кидки в наведеній нижче програмі. Оскільки FileNotFoundException є підкласом IOException , ми можемо просто уточнити IOException у списку кидків і зробіть програму компілятора без помилок.
приклад:
Java
// Java Program to Illustrate Checked Exceptions> // Where FileNotFoundException does not occur> // Importing I/O classes> import> java.io.*;> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > throws> IOException> > {> > // Creating a file and reading from local repository> > FileReader file => new> FileReader(> 'C: esta.txt'> );> > // Reading content inside a file> > BufferedReader fileInput => new> BufferedReader(file);> > // Printing first 3 lines of file 'C: esta.txt'> > for> (> int> counter => 0> ; counter <> 3> ; counter++)> > System.out.println(fileInput.readLine());> > // Closing all file connections> > // using close() method> > // Good practice to avoid any memory leakage> > fileInput.close();> > }> }> |
Вихід:
First three lines of file 'C: esta.txt'
Неперевірені винятки в Java
Це винятки, які не перевіряються під час компіляції. У C++ усі винятки не перевіряються, тому компілятор не змушує його обробляти чи вказувати виняток. Програмісти повинні бути цивілізованими та вказувати чи ловити винятки. У Java винятки під Помилка і RuntimeException класи є неперевіреними винятками, усе інше під кидком перевіряється.
Розглянемо наступну програму Java. Він добре компілюється, але викидає ArithmeticException при запуску. Компілятор дозволяє компілювати, оскільки ArithmeticException є неперевіреним винятком.
приклад:
Java
// Java Program to Illustrate Un-checked Exceptions> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String args[])> > {> > // Here we are dividing by 0> > // which will not be caught at compile time> > // as there is no mistake but caught at runtime> > // because it is mathematically incorrect> > int> x => 0> ;> > int> y => 10> ;> > int> z = y / x;> > }> }> |
Вихід
Exception in thread 'main' java.lang.ArithmeticException: / by zero at Main.main(Main.java:5) Java Result: 1
Коротше кажучи, неперевірені винятки — це винятки під час виконання, які не потрібно перехоплювати або оголошувати в пункті throws. Ці винятки зазвичай викликані помилками програмування, такими як спроба отримати доступ до індексу поза межами масиву або спроба поділити на нуль.
Неперевірені винятки включають усі підкласи класу RuntimeException, а також клас Error та його підкласи.
Ось кілька прикладів неперевірених винятків у Java:
1. ArrayIndexOutOfBoundsException: Цей виняток виникає, коли ви намагаєтеся отримати доступ до індексу масиву, який знаходиться поза межами.
2. Виняток NullPointer: Цей виняток виникає, коли ви намагаєтесь отримати доступ до посилання на нульовий об’єкт.
3. ArithmeticException: Цей виняток виникає, коли ви намагаєтеся поділити на нуль або виконуєте недійсну арифметичну операцію.