2011-06-14 8 views
5

Si jeActionScript 3.0 try..catch

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

et disons que dans fonction2() une exception est levée, ce qui du code ne sont exécutées par définition? function3() sera-t-elle exécutée? les effets de la fonction1 seront-ils présents après la capture? (il y a des langages de programmation qui 'rembobinent' les effets comme si le bloc entier n'était pas exécuté)

merci pour la clarification!

Répondre

9

Une tentative try exécutera tout le code jusqu'à ce qu'une exception soit levée. À ce stade, l'exception se déclenchera jusqu'à ce qu'elle atteigne un bloc catch ou que le programme se termine. Flash ne "rembobine" pas le code qu'il a exécuté.

Supposons que function2() a 10 lignes et que la ligne 4 lève l'exception, les lignes 5-10 ne seront pas exécutées. Nor will function3(). Le code ira dans votre catch, puis exécuter function4().

Une autre construction à utiliser dans try..catch .. est le bloc finally, qui est une section de code qui est exécutée après le try ou catch. Il est particulièrement utile pour des choses comme myNetConn = null où vous avez peut-être eu une erreur en fermant une connexion NetConnection, mais souhaitez quand même annuler l'objet.

+1

merci! si enfin est exécuté néanmoins, quelle est la différence de mettre le code juste après la clause catch au lieu de le mettre en 'finally'? – Mat

+2

http://stackoverflow.com/questions/547791/why-use-finally-in-c A une très bonne réponse pour cela. La réponse générale est que le 'finally' sera exécuté même si votre code' catch' renvoie lui-même une exception. –

+0

+ exécute enfin ** avec ** et ** sans ** aucune erreur. – n4pgamer