Выбрасывание исключений

Типы данных и исключения в 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(
   "Oops - trying to get non-existent item");
  }
}

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

public static void main(String[] args) {
  try {
    someMethod();
  } catch (IndexOutOfBoundsException e) {
    System.out.println(
   "someMethod tried to get non-existent item");
  }
}
public static void someMethod()
      throws IndexOutOfBoundsException {
  ArrayList<String> games
    = new ArrayList<String>();
  games.add("Monopoly");
  games.add("Chess");
  games.get(3);
}
Типы данных и исключения в Java

Когда использовать throws

  • «Перекладывание ответственности», или выбрасывание исключения, — практика, которую стараются избегать
    • Как правило, лучше перехватывать исключения там, где они возникают
  • Причины использовать throws вместо 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("Oops - tried a bad quotient");
        }
    }
    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...