TEMA 8 Excepciones V1.0 – 28/05/06 Manuel Pereira González Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen 1 Introducción Mecanismo para el control y gestión de errores basado en objetos llamados Excepciones Una Excepción es una condición anormal que surge en una secuencia de código durante la ejecución del programa. Cuando se produce una condición excepcional (error), se crea un objeto que representa la excepción y se le envía al método que lo ha provocado. La excepción contiene información sobre el error así como el estado del programa cuando se ha provocado. Introducción Cuando un método ha provocado una excepción tiene dos posibilidades: Gestionarla él mismo: Capturarla y tratarla. Pasarla al método invocador: Pasar el objeto de tipo excepción al método que lo invocase. La gestión de excepciones en Java se realiza a través de las palabras reservadas try/catch/finally/throw/throws 2 Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen Tipos de Excepciones en Java Toda excepción en Java es una subclase de la clase Throwable, que a su vez está dividida en: Exception: Representan excepciones que deben capturarse y tratarse. Una subclase de Exception es RuntimeException, de la que heredan excepciones como ArithmeticException, IndexOutOfBoundsException, NullPointerException, etc. Error: Representan fallos de tipo catastrófico generalmente no controlados, que originan la parada del programa en ejecución. Ej: OutOfMemoryError 3 Tipos de Excepciones en Java Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen 4 Gestión de Excepciones Al producirse un error en un método se genera un objeto que representa el error (Excepción). Si el error se genera en un método m, la JVM busca un gestor adecuado dentro del propio método. Si el gestor existe, cederá el control a dicho gestor Si el gestor no existe, buscará el gestor en el método que haya invocado al método m, y así sucesivamente, hasta encontrar un gestor capaz de tratar la excepción producida. Gestión de Excepciones 5 Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen Sentencias try/catch/finally Las sentencias try/catch/finally permiten capturar y resolver un problema que ha generado una excepción. try: Intentar. Define un bloque de código que se intenta ejecutar, y en el que podrían generarse excepciones. catch: Capturar. Define un bloque de código a ejecutar si se captura alguna excepción. Pueden existir varios bloques catch. finally: Finalmente. Una vez ejecutado el código especificado por try y/o catch, en este bloque se incluye código que se ejecuta siempre, independientemente de que se haya producido una excepción o no. Este bloque es opcional, puede no incluirse un bloque finally. 6 Sentencias try/catch/finally Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen 7 Múltiples catch Se pueden utilizar múltiples bloques de sentencias catch en el mismo bloque de sentencias try, cada bloque gestionará un tipo de excepción. El orden en el que se colocan las sentencias catch es relevante, los bloques catch de excepciones genéricas deberían situarse después de los de excepciones más particulares. La JVM busca en orden desdendente un bloque catch que sea capaz de controlar la excepción producida, una vez que lo encuentra no sigue buscando. Por ejemplo, si se incluyen dos bloques catch, uno que capture Exception y otro que capture NullPointerException, este último deberá colocarse el primero porque de lo contrario nunca podría llegar a ejecutarse. Múltiples catch 8 Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen Bloques try/catch anidados Se pueden anidar varias sentencias try/catch La búsqueda del gestor de la excepción se hace de los bloques más internos a los más externos. Cuando se ha encontrado un gestor de la excepción se ejecuta el código correspondiente, no se sigue propagando la excepción. 9 Bloques try/catch anidados Bloques try/catch anidados 10 Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen Sentencias throw y throws La sentencia throw se utiliza para “lanzar” (crear) una excepción explícitamente desde el código. Al lanzar una excepción explícitamente se interrumpirá el flujo de ejecución y se buscará un código que la gestione (sentencia catch), al igual que con las excepciones lanzadas implícitamente por la JVM. Para poder lanzar una excepción, es necesario que el objeto que lanzamos (la excepción) sea de la clase Throwable o de cualquier clase que herede de ésta (Error y Exception heredan de Throwable) 11 Sentencias throw y throws Sentencias throw y throws 12 Sentencias throw y throws Cuando un método no tiene un código para gestionar un determinado tipo de excepción, pero en este método puede generarse una excepción de ese tipo, el método debe declarar explícitamente que podría generar una excepción de este tipo. Para ello se utiliza la sentencia throws, que indica que un método puede lanzar un determinado tipo de excepción. Sólo es necesario declarar explícitamente que un método puede lanzar una excepción si ésta hereda de la clase Excepcion, y además no hereda de RuntimeException. Por tanto, la posible generación de excepciones que heredan de Error o heredan de RuntimeException NO debe declararse explícitamente. Sentencias throw y throws 13 Sentencias throw y throws Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen 14 Declaración de Excepciones Propias El programador puede definir excepciones propias heredando de la clase Exception. Estas excepciones funcionan de la misma manera que las predefinidas en el estándar de java: pueden lanzarse, capturarse, etc. Agenda Introducción Tipos de Excepciones en Java Gestión de Excepciones Sentencias try/catch/finally Múltiples catch Bloques try/catch anidados Sentencias throw y throws Declaración de excepciones propias Resumen 15 Resumen: Para más información http://www.javaworld.com/javaworld/ jw-07-1998/jw-07-exceptions.html http://java.sun.com/docs/books/tutori al/essential/exceptions/index.html http://web.cica.es/formacion/JavaTut/ Cap6/excep.html http://www.programacion.net/java/tu torial/excepciones/ 16