exceptions y assertions introducción a la terminología bloques: try, catch uso de finally bloques:...

36

Upload: chuy-santibanez

Post on 03-Jan-2015

60 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 2: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 3: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones comunes Mis excepciones Manejo de Excepciones

Page 4: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Mecanismos que permiten detectar errores fácilmente sin escribir código especial para testear valores de retorno

Mantienen el código de manejo del error separado de el que genera el error

Page 5: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Las excepciones manejan situaciones inesperadas:₋ Archivo no encontrado, falla en la red, argumento

ilegal,etc

Las assertions documentan y testean los supuestos del programa

₋ “Esto nunca puede ser negativo”

Los testeos de assertions pueden eliminarse completamente del código, así no hace más lenta la ejecución

Page 6: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

El término exception significa “condición excepcional” y se da cuando se altera el flujo normal de un programa.

Cuando ocurre un evento excepcional en Java, se dice que se lanza (throw) una excepción.

Al código que es responsable de hacer algo al respecto se le llama exception handler y es quien atrapa (catch) la excepción que se lanzó.

Page 7: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Por ejemplo, cuando se invoca un método que abre un archivo y este no puede ser abierto, la ejecución de ese método se termina y el código que maneja ese error se ejecuta.

Para esto se precisa una forma de decirle a la JVM que código ejecutar cuando cierta excepción es lanzada.

Page 8: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

El try se utiliza para definir un bloque de código que puede lanzar una excepción

Luego se define una o más cláusulas catch que atrapen ciertas excepciones y definen el código manejador de la misma.

Page 9: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Si se tiene uno o más bloques catch, estos deben aparecer inmediatamente después de un bloque try.

Todos los bloques catch deben aparecer uno a continuación del otro

Page 10: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Los bloques try y catch no resuelven el problema de cómo limpiar los recursos luego de un error

Para resolver este problema, Java provee el bloque finally

Este bloque siempre se ejecuta luego del try, se haya lanzado una excepción o no

Page 11: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 12: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Es legal utilizar un bloque try sin un catch o finally

Un bloque try sin ambas da error de compilación

Los bloques catch deben aparecer siguiendo al bloque try

El bloque finally debe aparecer luego de los catch

Es legal omitir los catch o el finally pero no ambos

Page 13: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Existen dos grandes categorías de excepciones:

₋ Checked

₋ Unchecked

Page 14: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

La clase Exception es la clase base que representa las excepciones checked.

La clase RuntimeException es la clase base que representa las excepciones uncheked.

La clase Error es la clase base que representa los errors.

Page 15: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 16: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

ArithmeticException

NullPointerException

NegativeArraySizeException

ArrayIndexOutOfBoundsException

SecurityException

Page 17: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

¿Por que los catch no son requeridos?

¿Que pasa cuando se lanza una excepción de un bloque try que no tiene catch asociado?

Si la excepción no es manejada en el bloque try-catch actual, es lanzada al método que lo invocó.

Si la excepción llega al método main y no es manejada, el programa termina de forma abrupta

Page 18: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

A continuación vemos un ejemplo de como utilizar un bloque con un try sin hacer uso del catch.

En este ejemplo, se lee la primer línea de un archivo. Se utiliza una instancia de la clase BufferedReader para leer los datos del archivo. Como vemos, la variable utilizada es cerrada en el bloque finally.

Page 19: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Cuando se lanza una excepción, Java intentará encontrar la cláusula catch para el tipo correspondiente de excepción

Si no encuentra una, seguirá buscando por la jerarquía de herencia hacia arriba

Si no encuentra nada que matchee entonces la excepción se propaga por el stack de llamadas

Importante: los handlers para las excepciones más específicas deben colocarse entes que los más generales

Page 20: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Cuando se detecta que ha ocurrido un error podemos crear una excepción y lanzarla

if ( n < 0) {throw new Exception(“numero negativo”);

}

Para declarar que el método lanza una excepción hay que utilizar la palabra throws

Page 21: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 22: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 23: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Cuando se sobrescribe un método que lanza alguna excepción, éste puede lanzar las mismas excepciones o alguna subclase de las mismas.

No puede lanzar más de lo que lanza el método padre.

Page 24: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

A continuación vemos un ejemplo en el cual el método toString para la clase Empleado, fue sobre escrito.

Page 25: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 26: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Para lanzar una excepción definida por el usuario, utilice la siguiente sintaxis:

throw new NombreClaseException();

Simpre instancie la exception en la misma línea donde se lanza, porque la excepción toma el número de línea dónde fue creada.

Page 27: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

En el ejemplo anterior, definimos un método llamado divide, el cual recibe dos números.

Si el segundo número es cero, entonces se lanza una excepción de tipo MiException.

Como vemos, el método debe tener la declaración de dicha excepción.

Page 28: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones
Page 29: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Existen dos sintaxis permitidas para la sentencia assert

assert <<boolean_expression> ;

assert <<boolean_expression>> :<<detail_expression>> ;

Si la <<boolean_expression>> retorna false, entonces un AssertionError es lanzado.

El segundo argumento es convertido a String y usado como texto descriptivo en el mensaje de AssertionError.

Page 30: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Para la documentación y verificación de supuestos asumidos en la lógica de un método:

₋ Invariantes internas₋ Control de flujo invariante₋ PostCondiciones e invariantes de clase

No es recomendado para el control de precondiciones en métodos públicos

Page 31: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

if ( x > 0 ){

//……..

}

else{

//……..

}

if ( x > 0 ){//……..}else{assert(x>=0);//……..}

Page 32: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

public Object pop(){int size = this.getElementCount();if(size == 0){

throw new RuntimeException(“Error..”)}//hace el trabajo de pop//test postcondicionassert (this.getElementCount() == size-1 )return value;

}

Page 33: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Si las assertion están deshabilitadas, el código ejecuta tan rápido como si no estuvieran.

Assertion están deshabilitadas por defecto₋ Para habilitarlas

₋ java -enableassertions ₋ java -ea

₋ Para dehabilitarlas₋ java -disableassertions₋ java -da

Page 34: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Comando Que significa?

java -eaJava –enableassertions

Habilita assertions

java -dajava –disableassertions

Deshabilita assertions

java –ea:com.foo.Bar Habilita asserts en la clase com.foo.Bar

java –ea:com.foo Habilita asserts en paquete com.foo.Bar y sus subpaquetes

java –ea –dsa Habilita asserts en general, deshabilita asserts en clases system

java –ea –da:com.foo Habilita asserts en general, deshabilita asserts en paquete com.foo y sus subpaquetes.

Page 35: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Exceptions y Assertions: diferencias Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones comunes Mis excepciones Manejo de Excepciones Ejemplos

Page 36: Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones

Thinking in Java₋ Bruce Eckel

The Java Tutorial₋ http://download.oracle.com/javase/tutorial/essential

/exceptions/

Introduction to Java Exception Handling₋ http://tutorials.jenkov.com/java-exception-handling/

index.html