Перейти к основному содержимому

Оператор throws

В теме "Введение в обработку исключений" были рассмотрены некоторые основные моменты обработки исключений. Сейчас более подробно поговорим о других моментах, связанных с обработкой исключений.

Иногда метод, в котором может генерироваться исключение, сам не обрабатывает это исключение. В этом случае в объявлении метода используется оператор throws, который надо обработать при вызове этого метода. Например, у нас имеется метод вычисления факториала, и нам надо обработать ситуацию, если в метод передается число меньше 1:

public static int getFactorial(int num) throws Exception {
if (num < 1) throw new Exception("The number is less than 1");
int result = 1;
for (int i = 1; i <= num; i++) {
result *= i;
}
return result;
}

С помощью оператора throw по условию выбрасывается исключение. В то же время метод сам это исключение не обрабатывает с помощью try..catch, поэтому в определении метода используется выражение throws Exception.

Теперь при вызове этого метода нам обязательно надо обработать выбрасываемое исключение:

public static void main(String[] args) {
try {
int result = getFactorial(-6);
System.out.println(result);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}

Без обработки исключение у нас возникнет ошибка компиляции, и мы не сможем скомпилировать программу.

В качестве альтернативы мы могли бы и не использовать оператор throws, а обработать исключение прямо в методе:

public static int getFactorial(int num) {
int result = 1;
try {
if (num < 1) throw new Exception("The number is less than 1");
for (int i = 1; i <= num; i++) {
result *= i;
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
result = num;
}
return result;
}