Кидання

Типи даних і винятки в Java

Jim White

Java Developer

Варіанти обробки

  • Перевірювані винятки потрібно «обробляти»
    • «Обробка» винятків часу виконання не обов'язкова
  • Два варіанти «обробки»
    • Використати try і catch, щоб перехопити Exception і написати код для вирішення проблеми
    • «Кинути» виняток
  • Try/catch — кращий спосіб обробляти винятки
    • Але не завжди можливо; інколи варто централізувати обробку винятків
Типи даних і винятки в Java

Ключове слово throws

  • Додайте throws до будь-якого методу, щоб передати виняток назад викликаючому методу
    • Замість обробки винятку в самому методі
    • Це називають «кидати виняток» або «перекладати відповідальність»
    • Передання відповідальності за обробку винятку викликачу
  • Після throws вкажіть список типів винятків, розділених комами
    • Показує, які винятки має передбачити метод-викликач
public static void someMethod() throws IndexOutOfBoundsException, 
NegativeArraySizeException, NullPointerException {
  // method code
}
Типи даних і винятки в Java
Приклад з throws

Звичайний try-catch для обробки Exception

public static void main(String[] args) {
  someMethod();
}
public static void someMethod(){
  try {
    ArrayList<String> games
      = new ArrayList<String>();
    games.add("Monopoly");
    games.add("Chess");
    games.get(3);
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "Ой — спроба отримати неіснуючий елемент");
  }
}

Використання throws для обробки Exception

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod намагався отримати неіснуючий елемент");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Типи даних і винятки в Java

Коли використовувати throws

  • «Перекладати відповідальність» через кидання винятку зазвичай намагаються уникати
    • Краще за все обробляти винятки try-catch там, де вони виникають
  • Чому інколи кидають замість try-catch:
    • Метод, де стається виняток, може не знати, як відновитися
    • Централізація обробки, щоб уникнути дублювання коду try/catch

Кидання винятку зазвичай використовують із власними винятками

1 Photo from https://unsplash.com/@philipparosetite
Типи даних і винятки в Java

Перехопити й перекинути

  • Exception можна «перекидати» далі
    • Викликаючий метод теж оголошує throws замість try/catch
  • Перекидання з main зупинить застосунок

Винятки можна перекидати у викликаючі методи

Типи даних і винятки в Java

Приклад перекидання

public class RethrowExample {
    public static void main(String[] args) {
        try {
            method1(0);
        } catch (ArithmeticException e) {
            System.out.println("Ой — спроба некоректного ділення");
        }
    }
    public static void method1(int divisor) throws ArithmeticException {
        method2(divisor);
    }
    public static void method2 (int divisor) throws ArithmeticException {
        int z = 5/divisor;
        System.out.println(z);
    }
}
Типи даних і винятки в Java

Давайте потренуємось!

Типи даних і винятки в Java

Preparing Video For Download...