Руководство по actionscript. часть 2, стр. 092
Следующий код демонстрирует метод, генерирующий ошибку, которая никогда не будет обработана:
public class ProblemClass { public function doSomething ( ):void { // Среда выполнения Flash: Хм. Блок try отсутствует. // Проверю-ка я, кто вызвал этот метод, throw new Error(«Something went wrong»);
}
}
public class ErrorDemo extends Sprite { public function ErrorDemo ( ) { // Среда выполнения Flash: Ага, вот кто вызвал метод doSomething( ). // Но здесь все равно нет блока try. Хм. Я просмотрела весь стек вызовов // до самого верха и не нашла блока try. Если это отладочная версия // среды выполнения Flash, я сообщу о проблеме. Возможно, программист
// знает, что нужно делать.
var problemObject-.ProblemClass = new ProblemClass( ); problemObject. doSomething( );
}
}
Как мы только что увидели, метод не обязан обрабатывать свои собственные исключения, поскольку исключения обладают способностью подниматься вверх по стеку вызовов. Исключения метода не обязан обрабатывать даже код, вызывающий этот метод. Обработка исключения допускается на любом уровне в стеке вызовов. Любой метод может делегировать обработку исключений коду, вызывающему данный метод. С другой стороны, генерация исключений, которые никогда не будут обработаны, является дурным тоном и оказывает опасное воздействие на программу. Вы должны всегда обрабатывать исключения или, если столкнетесь с необработанным исключением, в первую очередь изменить свой код, чтобы избежать повторной генерации данного исключения.
Блок finally
Пока мы рассмотрели лишь блоки try и catch инструкции try/catch/finally. Как уже известно, блок try содержит код, который может генерировать исключение, а блок catch включает в себя код, который выполняется в ответ на сгенерированное исключение. Для сравнения, блок finally содержит код, который выполняется всегда, независимо от того, возникло в блоке try исключение или нет.
Инструкция try/catch/finally содержит один (и только один) блок finally, который является ее последним блоком. Например:
try {
// Вложенные инструкции } catch (е:Тип0шибки1) {
II Обработка исключений типа Тип0шибки1. } catch (е:ТипОшибкип) {
II Обработка исключений типа ТипОшибкип. } finally {
// Этот код выполняется всегда, независимо от того, как завершается // выполнение блока try.