Назад Зміст Вперед

9.4. Розповсюдження неперехоплених винятків

Винятки у методах. Перевірні та неперевірні винятки

В мові 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.

Перевірними є всі інші класи винятків. Якщо у методі створюється неперевірний виняток, то метод оголошується та виконується так, як у наведених вище прикладах. Якщо метод створює перевірний виняток, то для правильного виконання потрібно в оголошенні методу вказати назви класів цих винятків за допомогою ключового слова 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 — виконання даного потоку було припинено іншим потоком;
.