2011-06-14 16 views
5

Si usoActionScript 3.0 try..catch

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

Y digamos que en function2() se produce una excepción, que el código se alcanza a ejecutar por definición? se ejecutará function3()? ¿Los efectos de la función 1 estarán presentes después de la captura? (No son lenguajes de programación que 'rebobinar' los efectos como si todo el bloque no se ha ejecutado)

gracias por la aclaración!

Respuesta

9

Un intento de captura ejecutará todo el código hasta que se produce una excepción. En ese punto, la excepción burbujeará hasta que llegue a un bloque catch o el programa salga. Flash no "rebobina" ningún código que haya ejecutado.

Say function2() es de 10 líneas y la línea 4 lanza la excepción, líneas 5-10 no se ejecutarán. Tampoco funcionará3(). El código irá a tu captura y luego ejecutará la función 4().

Otra construcción para su uso en try..catch .. es el bloque finally, que es una sección de código que se ejecuta después de que el try o captura. Es particularmente útil para cosas como myNetConn = null donde puede haber tenido un error al cerrar una conexión de red, pero todavía desea anular el objeto.

+1

gracias! si finalmente se ejecuta, ¿cuál es la diferencia de poner el código justo después de la cláusula catch en lugar de ponerlo en 'finally'? – Mat

+2

http://stackoverflow.com/questions/547791/why-use-finally-in-c Tiene una muy buena respuesta para esto. La respuesta general es que el 'finally' se ejecutará incluso si el código' catch' arroja una excepción. –

+0

+ finalmente se ejecuta ** con ** y ** sin ** ningún error. – n4pgamer