Upload
uvm
View
1.534
Download
1
Embed Size (px)
Citation preview
1_1_5 Objetos 1_1_5 Objetos excepciónexcepción
Apoyo SSD3Apoyo SSD3
Mtl Lourdes CahuichMtl Lourdes Cahuich 22
IntroducciónIntroducción
Un código robusto es un código que Un código robusto es un código que responde apropiadamente a entradas responde apropiadamente a entradas inválidas y condiciones ambientales inválidas y condiciones ambientales inesperadas.inesperadas.
Durante la ejecución de un programa Durante la ejecución de un programa pueden ocurrir muchas fallas — o eventos pueden ocurrir muchas fallas — o eventos excepcionales— que interrumpen el flujo excepcionales— que interrumpen el flujo normal de un programanormal de un programa
Mtl Lourdes CahuichMtl Lourdes Cahuich 33
IntroducciónIntroducción
Un código robusto maneja adecuadamente las Un código robusto maneja adecuadamente las fallas: continúa la ejecución a pesar del fallas: continúa la ejecución a pesar del problema o termina la ejecución después de problema o termina la ejecución después de desplegar un mensaje de errordesplegar un mensaje de error
El El manejo de excepciones manejo de excepciones es un mecanismo es un mecanismo que permite que las fallas sean manejadas fuera que permite que las fallas sean manejadas fuera del flujo normal del código.del flujo normal del código.
El código resultante es claro, fácil de leer y fácil El código resultante es claro, fácil de leer y fácil de mantenerde mantener
Mtl Lourdes CahuichMtl Lourdes Cahuich 44
Con el manejo de excepciones, el flujo normal del código es especificado en elcuerpo de un bloque try y cada falla es manejada en un bloque catch que se encuentra separado del flujo normal del código.
Mtl Lourdes CahuichMtl Lourdes Cahuich 55
Manejo de excepcionesManejo de excepciones
En Java, una En Java, una excepciónexcepción es un objeto que es un objeto que describe una situación anormal. Un describe una situación anormal. Un objeto objeto excepción (exception object) excepción (exception object) contiene la contiene la siguiente información:siguiente información: El tipo de excepciónEl tipo de excepción Una pila de llamadas (Una pila de llamadas (call stackcall stack) que indica ) que indica
donde ocurrió la excepcióndonde ocurrió la excepción Una cadena de caracteres con información Una cadena de caracteres con información
adicional sobre la excepciónadicional sobre la excepción
Mtl Lourdes CahuichMtl Lourdes Cahuich 66
Manejo de excepcionesManejo de excepciones
Cuando ocurre una situación anormal, un Cuando ocurre una situación anormal, un método puede crear un objeto excepción método puede crear un objeto excepción y después y después lanzarlolanzarlo ( (throwthrow).).
Si el método que hace la llamada no está Si el método que hace la llamada no está preparado para preparado para atraparatrapar ( (catch)catch) el objeto el objeto excepción, éste lanza el objeto excepción excepción, éste lanza el objeto excepción al método que al método que lolo llama y así llama y así sucesivamente.sucesivamente.
Mtl Lourdes CahuichMtl Lourdes Cahuich 77
Manejo de excepcionesManejo de excepciones
El método que atrapa el objeto excepción El método que atrapa el objeto excepción utiliza la información que se encuentra en utiliza la información que se encuentra en el objeto para manejar la excepciónel objeto para manejar la excepción
Para prevenir la terminación prematura de Para prevenir la terminación prematura de un programa, debes incluir bloques un programa, debes incluir bloques try-try-catchcatch que permitan que el programa se que permitan que el programa se recupere de las fallas.recupere de las fallas.
Mtl Lourdes CahuichMtl Lourdes Cahuich 88
Mtl Lourdes CahuichMtl Lourdes Cahuich 99
Mtl Lourdes CahuichMtl Lourdes Cahuich 1010
Mtl Lourdes CahuichMtl Lourdes Cahuich 1111
Manejo de excepcionesManejo de excepciones
En la clase En la clase ExceptionDemoExceptionDemo, el , el método método mainmain llama a llama a methodAmethodA, , methodAmethodA llama llama a a methodBmethodB, , methodBmethodB llama llama aamethodCmethodC y y methodCmethodC llama a llama a methodDmethodD. .
El último método de la secuencia, El último método de la secuencia, methodDmethodD, , crea un nuevo objeto de excepción y lo crea un nuevo objeto de excepción y lo lanza al lanza al methodCmethodC. .
Mtl Lourdes CahuichMtl Lourdes Cahuich 1212
Manejo de excepcionesManejo de excepciones
La excepción pasa La excepción pasa por por methodCmethodC y y methodBmethodB hasta que es hasta que es atrapado por atrapado por methodAmethodA. .
methodAmethodA maneja la excepción imprimiendo maneja la excepción imprimiendo un rastro de la pila y terminando el un rastro de la pila y terminando el programa.programa.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1313
Métodos de los objetos excepciónMétodos de los objetos excepción
Los objetos excepción cuentan con un Los objetos excepción cuentan con un grupo de métodos comunes. Incluyen:grupo de métodos comunes. Incluyen:
• String getMessage()String getMessage()..• Obtiene el argumento que fue pasado al Obtiene el argumento que fue pasado al
constructor del objeto de excepción.constructor del objeto de excepción.• String toString()String toString()..
• El nombre de la excepción (su tipo), seguido El nombre de la excepción (su tipo), seguido por dos puntos ( por dos puntos ( :: ), seguidos por ), seguidos por elelStringString regresado por el método regresado por el método getMessagegetMessage..
Mtl Lourdes CahuichMtl Lourdes Cahuich 1414
Métodos de los objetos excepciónMétodos de los objetos excepción
void printStackTrace()void printStackTrace(). Este método . Este método despliega, en el flujo de error estándar, despliega, en el flujo de error estándar, el el StringString regresado por el método regresado por el método toStringtoString, , seguido por la información que muestra seguido por la información que muestra dónde fue lanzada la excepción.dónde fue lanzada la excepción.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1515
El Bloque try-catchEl Bloque try-catch
Si un método elige manejar una Si un método elige manejar una excepción, debe tener un bloque excepción, debe tener un bloque try-catchtry-catch. .
Un bloque Un bloque trytry delimita el código que puede delimita el código que puede lanzar una excepciónlanzar una excepción
Mtl Lourdes CahuichMtl Lourdes Cahuich 1616
TipoExcepción es el tipo, o el nombre de la clase de la excepción que el bloque catch manejará. Observa que un bloque catch se parece a un encabezado de método porque toma un argumento.
Mtl Lourdes CahuichMtl Lourdes Cahuich 1717
Mtl Lourdes CahuichMtl Lourdes Cahuich 1818
Mtl Lourdes CahuichMtl Lourdes Cahuich 1919
La Cláusula throwsLa Cláusula throws
Si una excepción verificada puede ocurrir Si una excepción verificada puede ocurrir en un método y dicho método no tiene un en un método y dicho método no tiene un bloque bloque catchcatch para manejar la excepción para manejar la excepción verificada, entonces ésta verificada, entonces ésta debe debe ser ser declarada en el encabezado del método declarada en el encabezado del método utilizando una cláusulautilizando una cláusulathrowsthrows..
Mtl Lourdes CahuichMtl Lourdes Cahuich 2020
La Cláusula throwsLa Cláusula throws
En el siguiente código, ni el método En el siguiente código, ni el método readIntegerreadInteger ni ni el método el método main( )main( ) atrapan la excepción atrapan la excepción IOException; IOException; por lo tanto, ambos declaran por lo tanto, ambos declaran IOExceptionIOException en sus en sus cláusulas cláusulas throwsthrows..
Mtl Lourdes CahuichMtl Lourdes Cahuich 2121
Mtl Lourdes CahuichMtl Lourdes Cahuich 2222
Mtl Lourdes CahuichMtl Lourdes Cahuich 2323
La Instrucción throwLa Instrucción throw
Los métodos definidos por el usuario Los métodos definidos por el usuario también pueden lanzar excepciones. también pueden lanzar excepciones.
Para lanzar una excepción, utilizan la Para lanzar una excepción, utilizan la palabra clave palabra clave throwthrow, seguida por un objeto , seguida por un objeto excepción. Por ejemplo:excepción. Por ejemplo:
throw new OutOfRangeException();throw new OutOfRangeException();
Mtl Lourdes CahuichMtl Lourdes Cahuich 2424
El objeto excepción es creado como El objeto excepción es creado como cualquier otro objeto, utilizando el cualquier otro objeto, utilizando el operador operador newnew y un constructor. y un constructor.
La siguiente sentencia utiliza el La siguiente sentencia utiliza el constructor de la constructor de la excepción excepción OutOfRangeExceptionOutOfRangeException que acepta un que acepta un argumento de tipo argumento de tipo StringString..
throw new OutOfRangeException("Not a valid number");throw new OutOfRangeException("Not a valid number");
Mtl Lourdes CahuichMtl Lourdes Cahuich 2525
Documentando Excepciones con Documentando Excepciones con JavadocJavadoc
La etiqueta Javadoc para una excepción La etiqueta Javadoc para una excepción es la etiqueta es la etiqueta @throws@throws —también puede —también puede emplearse la etiqueta @emplearse la etiqueta @exceptionexception. .
El comentario Javadoc para un método El comentario Javadoc para un método debe tener una etiqueta debe tener una etiqueta @throws@throws por cada por cada excepción verificada que el método excepción verificada que el método pudiera lanzar. pudiera lanzar.
Mtl Lourdes CahuichMtl Lourdes Cahuich 2626
También puede tener También puede tener etiquetas etiquetas @throws@throws para las excepciones no para las excepciones no verificadas, pero no es necesario.verificadas, pero no es necesario.
El comentario Javadoc El comentario Javadoc nono debe tener una debe tener una etiqueta etiqueta @throws@throws para las excepciones para las excepciones atrapadas y manejadas por el método. atrapadas y manejadas por el método.
Utiliza los siguientes lineamientos para Utiliza los siguientes lineamientos para documentar excepciones:documentar excepciones:
Mtl Lourdes CahuichMtl Lourdes Cahuich 2727
• Cuando el método lanza más de una Cuando el método lanza más de una excepción, cada excepción debe estar excepción, cada excepción debe estar documentada en una línea diferente y documentada en una línea diferente y debe ser enlistada alfabéticamente.debe ser enlistada alfabéticamente.
• Ubica las etiquetas Ubica las etiquetas @throws@throws después de las después de las etiquetas etiquetas @param@param y y @return@return..
• Las etiquetas Las etiquetas @throws@throws deben describir la(s) deben describir la(s) situación(es) que causarán la excepciónsituación(es) que causarán la excepción