| Цитата(Platon @ 9.9.2008, 08:04) | | После того как выбрасывается любой Exception, вызывается блок finally, затем блок с соответствующим Exception. |
Немного поясню как я себе представляю суть процессов. Это плохо, что я не знаю как на самом деле происходит, но пока не знаю и где это посмотреть Надеюсь форум мне поможет.
Итак, далее следует исключильное ИМХО: при вызове throw new Exception на стеке создается новый указатель на объект Exception и если нет обработчиков, то именно он и вернется из метода. Дальше, если есть обработчик, то заходим туда. Вот тут то и самое интересное, при вызове return в стек, в нашем случае, помещается возвращаемое значение 2 и... метод должен прервать свое выполнение, но потом механизм обработки искл. ситуаций всё равно заходит в блок finaly и выполняет в нем код (на сколько вообще он там корректно сможет отработать при разных вариациях - вопрос отдельный) и соответственно при вызове return в стек помещается очередное значение 1 (или выталкивает предыдущее и заносит новое - тут вопрос). На выходе из метода получаем 1.
В общем, это то, как я вижу это. Надеюсь, более квалифицированные специалисты прокомментируют с подробностями мои предположения. |