1
Sun Educación México
Control de Flujo y Excepciones
2
Sun Educación México
Instrucciones de Control de Flujo
• Las instrucciones de control de flujo gobiernan el
flujo de un ...
3
Sun Educación México
Instrucciones de Selección
• Java provee las instrucciones de selección que
permite a un programa e...
4
Sun Educación México
Instrucción if simple
• Tiene la siguiente sintaxis:
> if (<expresión condicional>)
> <instrucción>...
5
Sun Educación México
Instrucción if – else
• Tiene la siguiente sintaxis:
> if (<expresión condicional>)
– <instrucción ...
6
Sun Educación México
Ejemplo
• // Caso (A)
• if (cantidad > stock){
• if(stockMinimo) avisarEvento();
• }else continuarC...
7
Sun Educación México
Análisis del Ejemplo
• Claramente el caso A y B son totalmente distintos y puede ser
difícil de com...
8
Sun Educación México
Instrucción switch
• La instrucción switch es usada para elegir una entre muchas
acciones alternati...
9
Sun Educación México
Semántica de la instrucción switch
• La expresión entera es evaluada primero.
• La evaluación de la...
10
Sun Educación México
Consideraciones
• Las etiquetas case son opcionales.
• Solo puede haber solo una etiqueta default....
11
Sun Educación México
Ejemplo
• Se puede asociar una misma instrucción a muchas etiquetas
case.
> switch(var){
– case 2:...
12
Sun Educación México
Instrucciones de Iteración
• Un bucle permite que un bloque de instrucciones sean
ejecutadas repet...
13
Sun Educación México
Instrucción while
• La sintaxis de while es la siguiente:
while (<condición del bucle>)
<cuerpo de...
14
Sun Educación México
Instrucción do-while
• Sintaxis:
do
<cuerpo del bucle>
while (<condición del bucle>);
• La condici...
15
Sun Educación México
Instrucción for
• La sintaxis del bucle for es:
for (<inicialización>; <condición del bucle>; <exp...
16
Sun Educación México
Instrucciones de transferencia de control
• Java provee cuatro vías para transferir el control en
...
17
Sun Educación México
Instrucción break
• La instrucción break puede ser utilizada en bloques
etiquetados, bucles y inst...
18
Sun Educación México
Instrucción continue
• La instrucción continue puede ser usada en un bucle for,
while o do-while p...
19
Sun Educación México
Instrucción return
• La instrucción return es usada para detener la ejecución
actual de un método ...
20
Sun Educación México
Manejo de Excepciones
• Una excepción en Java es una señal que indica que ocurrió
alguna condición...
21
Sun Educación México
Paradigma throw-and-catch
• Este mecanismo esta construido en el paradigma throw-
and-catch (lanza...
22
Sun Educación México
Tipificación de Excepciones
• Las excepciones en Java son objetos.
• Todas derivan desde la clase ...
23
Sun Educación México
Tipos de Excepciones
• La clase java.lang.RuntimeException define excepciones en
tiempo de ejecuci...
24
Sun Educación México
Excepciones Comprobables
• Otras subclases de Exception definen otras categorías de
excepciones, c...
25
Sun Educación México
Excepciones No Comprobables
• Excepciones definidas por las clases Error y RuntimeException
y sus ...
26
Sun Educación México
Mecanismo de captura
• Si una excepción no es explícitamente capturada y
manejada por el programa,...
27
Sun Educación México
Tipos de excepciones
• Nuevas excepciones se crean extendiendo la clase
Exception o alguna subclas...
28
Sun Educación México
Bloques try,catch y finally
• Una construcción try, catch y finally permite controlar
excepciones....
29
Sun Educación México
• Las excepciones lanzadas en el bloque try, pueden ser capturadas y
manejadas por el bloque catch...
30
Sun Educación México
El bloque try
• El bloque try establece un contexto donde se puede
producir una excepción.
• Si no...
31
Sun Educación México
El bloque catch
• Es una salida desde un bloque try donde se produjo una
excepción que transfirió ...
32
Sun Educación México
Continuación..Bloque catch
• Si la excepción ha sido tratada en el bloque catch, la ejecución
cont...
33
Sun Educación México
El bloque finally
• El código de este bloque siempre es ejecutado,
esto esta garantizado si se eje...
34
Sun Educación México
Instrucción throw
• Un programa puede lanzar cualquier excepción,
usando la instrucción throw.
• L...
35
Sun Educación México
Instrucción throw
• Ejemplo:
> throw new DivisionByZeroException(“/ by 0”);
> La excepción comprob...
36
Sun Educación México
Consideraciones
• Cuando la excepción es lanzada, la ejecución normal es
suspendida.
• El sistema ...
37
Sun Educación México
Clausula throws
• Cualquier método puede causar que una excepción comprbable
pueda ser lanzada.
• ...
38
Sun Educación México
Clausula throws
• Asiste el desarrollo de programas robustos, permitiendo
múltiples contingencias....
39
Sun Educación México
Sobreescritura y la clausula throws
• Una subclase puede sobrescribir un método
especificado en la...
Upcoming SlideShare
Loading in …5
×

Control deflujoexcepciones

177 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
177
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Control deflujoexcepciones

  1. 1. 1 Sun Educación México Control de Flujo y Excepciones
  2. 2. 2 Sun Educación México Instrucciones de Control de Flujo • Las instrucciones de control de flujo gobiernan el flujo de un programa durante la ejecución. • Hay tres categorías de instrucciones de control de flujo: > Selección: if, if-else y switch > Iteración: while, do-while y for. > Transferencia: break, continue, return y try-catch-finally
  3. 3. 3 Sun Educación México Instrucciones de Selección • Java provee las instrucciones de selección que permite a un programa elegir entre acciones alternativas durante la ejecución. • La opción esta basada en un criterio especificado en la instrucción de selección. Estas instrucciones de selección son: > Instrucción simple if > Instrucción if-else > Instrucción switch
  4. 4. 4 Sun Educación México Instrucción if simple • Tiene la siguiente sintaxis: > if (<expresión condicional>) > <instrucción> • Es utilizada para determinar si una acción será ejecutada, basado en la condición. > La condición es especificada por <expresión condicional> y la acción que será ejecutada es especificada por <instrucción>. > La semántica del simple if es recta. La <expresión condicional> es evaluada primero. – Si el valor resultante es verdadero, entonces se ejecuta la <instrucción> y continúa con el flujo del programa. – Si es falso, entonces se salta la <instrucción> y continua con el flujo del programa.
  5. 5. 5 Sun Educación México Instrucción if – else • Tiene la siguiente sintaxis: > if (<expresión condicional>) – <instrucción 1> > else – <instrucción 2> • Es utilizada para elegir entre dos acciónes basandose en una condición. • Si el valor resultante es verdadero, entonces se ejecuta la <instrucción 1> y continúa con el flujo del programa. • Si el valor resultante es falso, entonces se ejecuta la <instrucción 2> y continúa con el flujo del programa. • La cláusula else puede ser omitida, en ese caso se trasforma en un simple if
  6. 6. 6 Sun Educación México Ejemplo • // Caso (A) • if (cantidad > stock){ • if(stockMinimo) avisarEvento(); • }else continuarCompra(); • • // Caso (B) • if (cantidad > stock) • if(stockMinimo) avisarEvento(); • else continuarCompra();
  7. 7. 7 Sun Educación México Análisis del Ejemplo • Claramente el caso A y B son totalmente distintos y puede ser difícil de comprender, más aun si la identacion no ayuda al correcto entendimiento. • Al margen de considerar si algo esta “bien” o “mal” programado se debe tener presente lo siguiente: • La cláusula else se refiere al if mas próximo, si este no esta asociado actualmente con otra cláusula else. • Se recomienda el uso de una notación con bloques y una apropiada identacion, de manera de hacer el comportamiento obvio. • Instrucciones if – else en cascada, corresponden a una secuencia de if-else donde el siguiente if se encuentra unido a la cláusula else previa. Permitiendo condicionar la ejecución del bloque else, en caso de que la instrucción if resulta falso.
  8. 8. 8 Sun Educación México Instrucción switch • La instrucción switch es usada para elegir una entre muchas acciones alternativas. > Se basa en una expresión de tipo entera. • La sintaxis general es: switch (<expresión entera>) { case label 1: <instrucción 1> case label 2: < instrucción 2> … case label n: < instrucción n> default: < instrucción> }
  9. 9. 9 Sun Educación México Semántica de la instrucción switch • La expresión entera es evaluada primero. • La evaluación de la expresión es comparada sucesivamente con cada etiqueta case. > Si es igual se ejecuta el código de la instrucción asociada al case. – Después de esto se ejecutan todas las instrucciones siguientes, sin importar que la expresión evaluada coincida con la etiqueta case. – Es habitual utilizar la instrucción break para cambiar este comportamiento. • Si la evaluación de la expresión no es igual a ninguna etiqueta se ejecuta la instrucción asociada a la etiqueta default.
  10. 10. 10 Sun Educación México Consideraciones • Las etiquetas case son opcionales. • Solo puede haber solo una etiqueta default. • Si ninguna etiqueta case coincide con la expresión, toda la instrucción switch es omitida. • El orden de las etiquetas case y default pueden ir en cualquier orden. • La expresión de la etiqueta label debe ser constante y único. • El tipo de datos de la expresión y de la etiqueta case, puede ser: > char > short > byte > int Ó... un enum!
  11. 11. 11 Sun Educación México Ejemplo • Se puede asociar una misma instrucción a muchas etiquetas case. > switch(var){ – case 2: case 4: case 6: – System.out.println(“Par”); – break; – case 3: case 5: case 7: – System.out.println(“ImPar”); – break; > } • Se pueden crear switch anidados sin que existan conflictos entre las etiquetas case, ya que cada switch define su propio ámbito.
  12. 12. 12 Sun Educación México Instrucciones de Iteración • Un bucle permite que un bloque de instrucciones sean ejecutadas repetidamente (iterada) • Comúnmente una condición booleana es utilizada para determinar cuando un bucle debe ser terminado, se conoce como condición del bucle. • Las instrucciones ejecutadas dentro del bucle constituyen el cuerpo del bucle. > Puede ser una instrucción simple o un bloque. • Java provee tres construcciones del lenguaje para crear bucles: > Instrucción while > Instrucción do-while > Instrucción for
  13. 13. 13 Sun Educación México Instrucción while • La sintaxis de while es la siguiente: while (<condición del bucle>) <cuerpo del bucle> • La condición del bucle es evaluada antes de ejecutar el cuerpo del bucle. • La instrucción while ejecuta el cuerpo del método mientras la <condición del bucle> sea verdadera. > Cuando es falso termina y continúa con la línea siguiente al cuerpo del bucle. • La <condición del bucle> debe ser una expresión booleana.
  14. 14. 14 Sun Educación México Instrucción do-while • Sintaxis: do <cuerpo del bucle> while (<condición del bucle>); • La condición del bucle es evaluada después de ejecutar el cuerpo del bucle. • La instrucción while ejecuta el cuerpo del método mientras la <condición del bucle> sea verdadera. > Cuando es falso termina y continúa con la línea siguiente al cuerpo del bucle. • La <condición del bucle> debe ser una expresión booleana. • La ejecución del cuerpo de bucle se garantiza al menos una vez.
  15. 15. 15 Sun Educación México Instrucción for • La sintaxis del bucle for es: for (<inicialización>; <condición del bucle>; <expresión de incremento>) <cuerpo del bucle> • El bucle for es utilizado para realizar bucles controlados por un contador. > Cuando el numero de iteraciones conocido de antemano. • La <inicialización> es utilizada para declara e inicializar la variable que controla la ejecución del cuerpo del bucle. • La <condición del bucle> es una expresión booleana que usualmente involucra a la variable que controla el bucle para comprobar si la ejecución del bucle continúa o no. • En cada iteración (ejecución del cuerpo del bucle) la <expresión de incremento> es ejecutada y usualmente modifica el valor de la variable controla la ejecución del bucle.
  16. 16. 16 Sun Educación México Instrucciones de transferencia de control • Java provee cuatro vías para transferir el control en un programa: > break > continue > return > try-catch-finally • Nota: goto no es una instrucción valida en Java, sin embargo se encuentra reservada.
  17. 17. 17 Sun Educación México Instrucción break • La instrucción break puede ser utilizada en bloques etiquetados, bucles y instrucciones switch, con el objetivo de transferir en control fuera del contexto actual. • Para los bloques etiquetados, el resto del bloque es ignorado y la ejecución continúa con la siguiente instrucción fuera del bloque. • Para los bucles, el resto del bloque es ignorado, termina el bucle, y la ejecución continúa con la siguiente instrucción fuera del bloque. • Para la instrucción switch, el resto de la instrucción switch es ignorado y la ejecución continúa con la siguiente instrucción fuera de switch.
  18. 18. 18 Sun Educación México Instrucción continue • La instrucción continue puede ser usada en un bucle for, while o do-while para interrumpir prematuramente la iteración actual y pasar a la siguiente iteración, si es posible. • Para los bucles while y do-while, el resto del cuerpo del bucle es omitido. • La ejecución continua en <condicion del bucle> • Para el bucle for, el resto del cuerpo del bucle es omitido. • La ejecución continua en <expresión de incremento> • La instrucción continue puede ser usado con una etiqueta opcional, que identifica a un etiqueta que agrupa a un bucle.
  19. 19. 19 Sun Educación México Instrucción return • La instrucción return es usada para detener la ejecución actual de un método y transferir el control al método llamador. • El uso de return varia dependiendo si es usado en un método void o no-void. > Para los void, es opcional > Para los no-void es obligatorio, y debe retornar una expresión que debe ser asignable el tipo de retorno definido en el encabezado del método
  20. 20. 20 Sun Educación México Manejo de Excepciones • Una excepción en Java es una señal que indica que ocurrió alguna condición excepcional. > Por ejemplo: – La petición a un archivo no encontrado. – Un índice fuera del rango. – Un enlace de red fallido. • Realizar una comprobación manual y continua puede producir un código fuente incomprensible. • Java provee un mecanismo para tratar sistemáticamente las condiciones excepcionales.
  21. 21. 21 Sun Educación México Paradigma throw-and-catch • Este mecanismo esta construido en el paradigma throw- and-catch (lanzar-y-capturar). • Lanzar (throw) una excepción es señal de que una condición excepcional ha ocurrido. • Capturar (catch) una excepción es tomar una acción apropiada para tratar la excepción. • Una excepción es capturada por un manejador de excepciones (exception hanlder), y la excepción no necesariamente debe ser capturada en el mismo contexto donde se produjo. • El comportamiento del programa en tiempo de ejecución determina que excepciones son lanzadas y como son capturadas.
  22. 22. 22 Sun Educación México Tipificación de Excepciones • Las excepciones en Java son objetos. • Todas derivan desde la clase java.lang.Throwable. • La clase java.lang.Error y sus subclases definen excepciones que indican problemas relacionados a; linkeo (LinkageError), hilos (ThreadDeath) y maquina virtual (VirtualMachineError). > Estos no pueden ser capturados explícitamente y usualmente son irrecuperables. • Todos los otros tipos de excepciones son subclases de java.lang.Exception.
  23. 23. 23 Sun Educación México Tipos de Excepciones • La clase java.lang.RuntimeException define excepciones en tiempo de ejecución que usualmente corresponden a fallas (bugs) en nuestros programas y de esta derivan las siguientes clases: > ArrayIndexOutOfBounds – Índice del arreglo fuera del rango. > NullPointerException – Referencias no inicializadas. > ClassCastException – Moldeo ilegal de referencias. > IlegalArgumentException – Parámetros ilegales. > ArithmeticException – División por cero. > NumberFormarException – Formato de número.
  24. 24. 24 Sun Educación México Excepciones Comprobables • Otras subclases de Exception definen otras categorías de excepciones, como por ejemplo excepciones de tipo I/O: > IOException > FileNotFoundException > EOFException > AWTException • A excepción de RunTimeException, Error y sus subclases, todas las excepciones son llamadas excepciones comprobadas (checked) > El compilador se asegura en caso de que un método pueda lanzar una excepción, directa o indirectamente este debe explícitamente tratarlo. > El método debe capturar la excepción y tomar una acción apropiada, o pasar la excepción al llamador
  25. 25. 25 Sun Educación México Excepciones No Comprobables • Excepciones definidas por las clases Error y RuntimeException y sus subclases son conocidas como excepciones no comprobadas, permitiendo a los métodos a no estar obligados a tratar este tipo de excepciones. • Son no comprobadas ya que el compilador no controla si el método gestiona o lanza estas excepciones. • Si una excepción no es explícitamente capturada y manejada por el programa, es pasada hacia arriba en la pila de métodos activos (method activation stack), y tratada por el manejador por defecto de excepciones (default exception handler). > Muestra un mensaje explicativo, la traza de la pila (se compone de los métodos que se encuentran en la pila de métodos activos) y la hora en que la excepción fue lanzada. > Una excepción no capturada causa la muerte de hilo (thread) en el cual ocurrió la excepción.
  26. 26. 26 Sun Educación México Mecanismo de captura • Si una excepción no es explícitamente capturada y manejada por el programa, es pasada hacia arriba en la pila de métodos activos (method activation stack), y tratada por el manejador por defecto de excepciones (default exception handler). • Muestra un mensaje explicativo, la traza de la pila (se compone de los métodos que se encuentran en la pila de métodos activos) y la hora en que la excepción fue lanzada. • Una excepción no capturada causa la muerte de hilo (thread) en el cual ocurrió la excepción.
  27. 27. 27 Sun Educación México Tipos de excepciones • Nuevas excepciones se crean extendiendo la clase Exception o alguna subclase, por lo tanto serán comprobadas. • Como las excepciones son clases, podemos definir miembros ya sean variables o métodos, para proveer más información a cerca de la causa y remedio cuando la excepción sea lanzada y captura. • La clase Throwable solo provee una variable String que debe ser asignada por las clases que la hereden. • La clase de la excepción deber ser instanciada para crear el objeto excepción que podrá ser lanzado y capturado posteriormente.
  28. 28. 28 Sun Educación México Bloques try,catch y finally • Una construcción try, catch y finally permite controlar excepciones. • La sintaxis general es la siguiente: > try{ – <instrucciones> > }catch (<tipo excepción 1> <parámetro 1>){ – <instrucciones> > }catch (<tipo excepción 2> <parámetro 2>){ – <instrucciones> > } finally{ – <instrucciones> > }
  29. 29. 29 Sun Educación México • Las excepciones lanzadas en el bloque try, pueden ser capturadas y manejadas por el bloque catch. > El código del bloque finally siempre es ejecutado. • Algunas características importantes de los bloques try, catch y finally son: > La notación de bloque es obligatoria. > Por cada bloque try pueden existir uno o mas bloques catch, pero solo un bloque finally, que además este es opcional. > Los bloques catch y finally siempre deben aparecer en conjunto a un bloque try, y en el orden try, catch y finally. > Un bloque try debe estar acompañado de al menos un bloque catch o un bloque finally. > Cada bloque catch define un manejador de excepciones. – El encabezado recibo exactamente un parámetro el cual es la excepción que debe ser tratada. – La excepción debe ser de clase Throwable o una subclase.
  30. 30. 30 Sun Educación México El bloque try • El bloque try establece un contexto donde se puede producir una excepción. • Si no se produce ninguna excepción el control es transferido al bloque finally, si este ha sido especificado. • Si se produce una excepción el control es transferido a los bloques catch buscando la coincidencia de algún bloque catch con la excepción. • Si no hay coincidencia el control es transferido al bloque finally, si este ha sido especificado.
  31. 31. 31 Sun Educación México El bloque catch • Es una salida desde un bloque try donde se produjo una excepción que transfirió el control al bloque catch. • Un bloque catch solo puede manejar una excepción si el de tipo referencia es asignable al parámetro del bloque catch. • El código del primer bloque catch que coincida es ejecutado, los demás son omitidos. • Después que el bloque catch es ejecutado el control siempre es transferido al bloque finally, si este ha sido especificado. • Si queda alguna excepción lanzada sin manejar en el bloque catch, hace que la ejecución del método sea abortada y la excepción es propagada como se explico anteriormente. • Igualmente se ejecuta el bloque finally, antes de la propagación.
  32. 32. 32 Sun Educación México Continuación..Bloque catch • Si la excepción ha sido tratada en el bloque catch, la ejecución continua normalmente. • Notas: > El compilador revisa que una superclase no “oculte” a una subclase en otro bloque catch > En este caso se producirá un error de compilación.
  33. 33. 33 Sun Educación México El bloque finally • El código de este bloque siempre es ejecutado, esto esta garantizado si se ejecuta algún bloque catch o no. • Se ejecuta antes de continuar con la ejecución o la propagación, y puede ser utilizado como una herramienta para liberar recursos, realizar tareas adicionales al catch, etc.
  34. 34. 34 Sun Educación México Instrucción throw • Un programa puede lanzar cualquier excepción, usando la instrucción throw. • La sintaxis general es: > throw <expresión referencia de objeto> • La referencia de objeto debe ser a la clase Throwable o alguna subclase. • Después que el objeto es creado utilizando la instrucción throw
  35. 35. 35 Sun Educación México Instrucción throw • Ejemplo: > throw new DivisionByZeroException(“/ by 0”); > La excepción comprobable (checked) DivisionByZeroException debe estar definida, de la siguiente manera: public class DivisionByZeroException extends Exception{ DivisionByZeroException(String msg){ super(msg); } }
  36. 36. 36 Sun Educación México Consideraciones • Cuando la excepción es lanzada, la ejecución normal es suspendida. • El sistema en tiempo de ejecución procede a encontrar algún bloque catch que pueda tratar la excepción. > La búsqueda comienza en el contexto del bloque try actual, propagándose a los distintos bloque catch y a través de la pila de invocación de métodos para encontrar un manejador para la excepción. > Importante: Cualquier bloque finally encontrado a través de esta búsqueda es ejecutado. • Si no se encuentra un manejador para la excepción, esta será tratada por el manejador de excepciones del nivel más alto. • Si es encontrado un manejador, la ejecución continúa en el bloque catch.
  37. 37. 37 Sun Educación México Clausula throws • Cualquier método puede causar que una excepción comprbable pueda ser lanzada. • Directamente a través de la instrucción throw. • Indirectamente a través de otros métodos que puedan lanzar la excepción. • Usualmente hay dos maneras de controlar una excepción. • Utilizando un bloque try-catch. • Propagando explícitamente la excepción al llamador usando la cláusula throws en el encabezado del método. • Este mecanismo asegura que el camino de ejecución no sea descuidado, donde la excepción comprobable debe ser monitoreada.
  38. 38. 38 Sun Educación México Clausula throws • Asiste el desarrollo de programas robustos, permitiendo múltiples contingencias. • El compilador asegura que el método solo pueda lanzar excepciones comprobables especificadas en la cláusula throws. • El tipo de excepción especificado en la cláusula throws en el encabezado del método puede ser de tipo superclase de las excepciones actuales. > En otras palabras las excepciones lanzadas deben ser de tipo asignable las excepciones especificadas en cláusula throws. > Ejemplo: Si un método puede lanzar excepciones de tipo A, B y C y todas son subclases de D, entonces en la cláusula throws podemos especificar A, B y C o solo especificar D. • Esto último no es un buen estilo de programación.
  39. 39. 39 Sun Educación México Sobreescritura y la clausula throws • Una subclase puede sobrescribir un método especificado en la superclase para proveer una nueva implementación. • La definición del método solo puede especificar las excepciones del método de la superclase, bajo las siguientes condiciones: • Puede especificar: > Una > Ninguna > Todas > Algunas (subconjunto)

×