2011-06-14 37 views
5

如果我使用的ActionScript 3.0在try..catch

try{ 
    function1(); 
    function2(); 
    function3(); 
} 
catch(e:Error){ 
    function4(); 
} 

,讓我們在函數2說()拋出一個異常,它的代碼不會得到通過定義執行?將函數3()得到執行?捕獲後函數1的影響是否存在? (有編程語言「倒帶」效果,如整個程序塊未執行)

感謝您的澄清!

回答

9

嘗試捕獲將執行所有代碼,直到拋出異常。此時,異常會冒泡,直到它遇到catch塊或程序退出。 Flash不會「倒回」它執行的任何代碼。

說到function2()是10行,第4行引發異常,第5-10行不會執行。也不會function3()。代碼將進入你的catch,然後執行function4()。

在try..catch ..中使用的另一個構造是finally塊,它是在try或catch之後執行的一段代碼。對於諸如myNetConn = null之類的事件,您可能在關閉NetConnection時發生錯誤,但仍然希望將對象歸爲空,這一點尤其有用。

+1

謝謝!如果最終被執行,那麼將代碼放在catch子句後面而不是放入「finally」中的區別是什麼? – Mat 2011-06-14 15:07:44

+2

http://stackoverflow.com/questions/547791/why-use-finally-in-c對此有一個很好的答案。一般的答案是'finally'將會被執行,即使你的catch代碼本身拋出一個異常。 – 2011-06-14 15:13:49

+0

+最後用**和**執行**而沒有**任何錯誤。 – n4pgamer 2013-10-04 21:37:07