throw

До сих пор мы перехватывали только исключения, которые возбуждала система времени выполнения Java. Однако существует возможность возбуждать исключения из ваших программ явным образом, используя оператор throw. Его общая форма показана ниже:

throw экземпляр_Trowable;

Здесь экземпляр_Trowable должен быть объектом типа Throwable либо подклассом Throwable. Примитивные типы — такие, как int или char, как и классы, отличные от Throwable, например String и Object, не могут быть использованы для исключений.

Существуют два способа получить объект Throwable: с использованием параметра в операторе catch либо созданием объекта оператором new.

Поток выполнения останавливается непосредственно после оператора throw — любые последующие операторы не выполняются. Обнаруживается ближайший закрытый блок try, имеющий оператор catch соответствующего исключению типа. Если соответствие найдено, управление передается этому оператору. Если же нет, проверяется следующий внешний блок try и т.д. Если не находится подходящего по типу оператора catch, то обработчик исключений по умолчанию прерывает программу и печатает трассировку стека.

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

// Демонстрация применения throw. class ThrowDemo {
static void demoprocf) {
try {
throw new NullPointerException("demo");
}
catch(NullPointerException e) {
System.out.println("Перехвачено внутри demoproc.");
throw e; // повторно возбудить исключение
}
}
public static void main(String args[]) {
try {
demoproc () ;
}
catch(NullPointerException e) {
System.out.println("Повторный перехват: " + e) ;
}
}
}

Эта программа получает два шанса обработки одной и той же ошибки. Во-первых, main () устанавливает контекст исключения, затем вызывает demoproc (). Метод demoproc () устанавливает другой контекст обработки исключения и немедленно возбуждает новый экземпляр исключения NullPointerException, который перехватывается в следующей строке. Затем исключение возбуждается повторно. Ниже показан результирующий вывод.

Перехвачено внутри demoproc.
Повторный перехват: java.lang.NullPointerException: demo

Эта программа также демонстрирует, как создавать собственные объекты стандартных исключений Java. Обратите внимание на строку:

throw new NullPointerException("demo");

Здесь операция new используется для конструирования экземпляра NullPointer-Exception. Многие их встроенных исключений времени выполнения Java имеют, по меньшей мере, два конструктора: один без параметров и один со строковым параметром. Когда применяется вторая форма, аргумент указывает строку, описывающую исключение. Эта строка отображается, когда объект используется в качестве аргумента print () или println (). Она также может быть получена вызовом метода getMessage (), который определен в Throwable.