Винятки у методах. Перевірні та неперевірні винятки
В мові Java існують два види винятків: перевірні та неперевірні.
Неперевірними є винятки, які є похідними від класів:
Error — клас, який є безпосереднім спадкоємцем загального для всіх винятків класу Throwable. Весь список підкласів класу Error знаходиться на сторінці https://docs.oracle.com/javase/7/docs/api/java/lang/Error.html.
RuntimeException — підклас класу Exception, який, в свою чергу, є підкласом класу Throwable. Весь список підкласів класу RuntimeException знаходиться на сторінці https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html.
Error — клас, який є безпосереднім спадкоємцем загального для всіх винятків класу Throwable. Весь список підкласів класу Error знаходиться на сторінці https://docs.oracle.com/javase/7/docs/api/java/lang/Error.html.
RuntimeException — підклас класу Exception, який, в свою чергу, є підкласом класу Throwable. Весь список підкласів класу RuntimeException знаходиться на сторінці https://docs.oracle.com/javase/7/docs/api/java/lang/RuntimeException.html.
Перевірними є всі інші класи винятків. Якщо у методі створюється неперевірний виняток, то метод оголошується та виконується так, як у наведених вище прикладах. Якщо метод створює перевірний виняток, то для правильного виконання потрібно в оголошенні методу вказати назви класів цих винятків за допомогою ключового слова throws:
void metodPerev() throws IOException { /* за допомогою ключового слова throws
ми вказуємо компілятору, що метод створює перевірний виняток IOException */
...
throw new IOException();
}
Програма ThrowThrows.java, яка показує застосування методів, що створюють перевірні та неперевірні винятки:
package inwe;
import java.io.IOException; /* щоб створювати об'єкти винятків IOException, потрібно імпортувати цей клас */
public class ThrowThrows {
static void vuvidNeperev() { /* метод, що створює об'єкти неперевірних винятків */
throw new ArithmeticException();
}
static void vuvidPerev() throws IOException { /* метод створює об'єкти перевірних винятків, для цього в оголошенні методу треба вказати клас даного винятку за допомогою ключового клова throws */
throw new IOException();
}
public static void main(String args[]) {
try {
/* Щоб виконався метод vuvidPerev(), потрібно закоментувати виклик метода vuvidNeperev() */
vuvidNeperev();
vuvidPerev();
}
catch(IOException|ArithmeticException vunjatok) {
System.out.println(vunjatok);
}
}
}
Результат:
java.lang.ArithmeticException
Якщо у методі, який створює об'єкти перевірних винятки, будуть створюватися декілька об’єктів перевірних винятків, то їх класи потрібно вказати після ключового слова throws через кому:
// Даний метод створює об'єкти винятків трьох неперевірних класів
void metodPerev() throws IOException, IllegalAccessException, SQLException {
...
}
Деякі перевірні та неперевірні винятки
Тут перераховуються деякі перевірні та неперевірні вбудовані винятки Java та їхній опис:
· неперевірні(не зазначаються при оголошенні методу):
UnsupportedOperationException — виняток викликається при здійсненні неприпустимих операцій;
NumberFormatException — неприпустиме перетворення текстової стрічки в число;
NullPointerException — невідповідне використання нульового вказівника;
NegativeArraySizeException — створення масиву від'ємного розміру;
ArrayIndexOutOfBoundsException — індекс даного елементу знаходиться поза межами масиву;
ClassCastException — неприйнятне перетворення типів;
ArrayStoreException — елементу масиву присвоюється неприпустиме значення;
ArithmeticException — здійснена арифметична помилка;
TypeNotPresentException — даний тип відсутній;
перевірні(зазначаються при оголошенні методу):
NoSuchFieldException — зазначеного поля не існує;
NoSuchMethodException — зазначеного методу не існує;
InstantianException — спроба створити об'єкт абстрактного класу чи інтерфейсу;
ClassNotFoundException — даний клас не знайдено;
InterruptedException — виконання даного потоку було припинено іншим потоком;