throws

Если метод может породить исключение, которое он сам не обрабатывает, он должен специфицировать это поведение так, чтобы вызывающий его код мог позаботиться об этом исключении. Это делается добавлением к объявлению метода конструкции throws. Конструкция throws перечисляет типы исключений, которые метод может возбуждать. Это необходимо для всех исключений, кроме имеющих тип Error, RuntimeException либо их подклассов. Все остальные исключения, которые может возбуждать метод, должны быть объявлены в конструкции throws. Если этого не сделать, получится ошибка во время компиляции.

Вот общая форма объявления метода, которая включает оператор throws:

тип имя_метода(список_параметров) throws список_исключений
{
// тело метода
}

Здесь список_исключений — это разделенный запятыми список исключений, которые метод может возбуждать.

Ниже представлен пример неправильной программы, пытающейся возбудить исключение, которое сама она не перехватывает. Поскольку в программе не указан оператор throws для отображения этого факта, такая программа не скомпилируется.

// Эта программа содержит ошибку и потому не компилируется.
class ThrowsDemo {
static void throwOneO {
System.out.println("Внутри throwOne. ") ;
throw new IllegalAccessException("демо");
}
public static void main(String args[]) {
throwOne ();
}
}

Чтобы скомпилировать этот пример, нужно внести в него два изменения. Во-первых, вы должны объявить, что throwOne () возбуждает исключение IllegalAccessException. Во-вторых, main () должен определять блок try/catch, который перехватит это исключение.

Исправленный пример выглядит следующим образом: // Теперь код корректен.
class ThrowsDemo {
static void throwOne() throws IllegalAccessException {
System.out.println("Внутри throwOne.");
throw new IllegalAccessException("demo");
public static void main(String args[]) {
try {
throwOne();
}
catch (IllegalAccessException e) {
System.out.println("Перехвачено " + e) ;
}
}
}

Вот результат, полученный при запуске этой программы:

Внутри throwOne
Перехвачено Java.lang.IllegalAccessException: demo