Руководство по actionscript. часть 2, стр. 090
// Блок catch, пожалуйста, выполняйтесь…
try {
var normal Object:Normal CI ass = new NormalClass( ); } catch (e:Error) { // Обработка ошибок…
trace(«Exception caught in ErrorDemo, thrown by doSomething( ).»);
}
}
}
Обратите внимание, что среда выполнения Flash находит блок try/catch, даже несмотря на то, что этот блок не включает ни код, генерирующий ошибку, ни код, который вызывает метод, генерирующий ошибку, а только код, вызывающий метод, который, в свою очередь, вызывает метод, генерирующий ошибку!
Следующий код демонстрирует предыдущий пример с передачей исключения вверх по иерархии объектов в контексте нашей программы по созданию виртуального зоопарка. Для краткости в следующем листинге показан только код, присваивающий объекту имя животного. Комментарии в коде описывают, как происходит передача исключения.
package { import flash. display. Sprite; import zoo.*;
public class VirtualZoo extends Sprite { private var pet:Virtual Pet;
public function VirtualZoo ( ) { try {
// Этот код пытается присвоить животному слишком длинное имя. // В результате метод setName( ) генерирует ошибку. // Однако возникшее исключение не обрабатывается в конструкторе // класса VirtualPet (откуда вызывается метод setName( )). Вместо // этого исключение обрабатывается там, где вызывается конструктор // класса VirtualPet (то есть двумя уровнями выше в стеке вызовов) pet = new Virtual Pet(«Bartholomew McGillicuddy»); } catch (e:Error) { traceC’An error occurred: » + e. message);
// Если в процессе создания объекта VirtualPet возникает исключение, // объект не будет создан. Таким образом, здесь мы создадим новый // объект VirtualPet с предопределенным допустимым именем.