gestión de errores en java
DESCRIPTION
Manejo de excepciones y gestión de errores en JavaTRANSCRIPT
Una excepción o un error es un evento que ocurre durante la ejecución de un programa y detiene el flujo normal de la secuencia de instrucciones de ese programa.
Las excepciones en Java están destinadas a la detección y corrección de errores. Si hay un error, la aplicación debe lanzar una excepción (throw) que a su vez debería capturar (catch) y resolver la situación de error, o poder ser tratada finalmente (finally) por un gestor por defecto u omisión.
Las excepciones son formas muy limpias de manejar errores y problemas inesperados
en la lógica del programa. Gestión de
Errores
Exception: Conjunto de excepciones que el programa debe capturar y resolver.
Subclases
RuntimeException, ArithmeticException, IndexOutOfBoundsException, NullPointerException, etc.
Gestión de Errores
Error: Son fallos de tipo catastrófico, originan la parada del programa.
Subclases
AWTError, LinkageError, ThreadDeath, VirtualMachineError, etc.
Los nombres de las excepciones indican la condición de error que representan. Las siguientes son las excepciones predefinidas más frecuentes que se pueden encontrar:
ArithmeticExceptionLas excepciones aritméticas son
típicamente el resultado de división por 0:int i = 12 / 0;
Gestión de Errores
Gestión de
Errores
IncompatibleClassChangeExceptionEl intento de cambiar una clase
afectada por referencias en otros objetos, específicamente cuando esos
objetos todavía no han sido recompilados.
ClassCastException El intento de convertir un
objeto a otra clase que no es válida.
NullPointerException Se produce cuando se intenta
acceder a una variable o método antes de ser definido.
Gestión de
Errores
NegativeArraySizeException Puede ocurrir si hay un error
aritmético al cambiar el tamaño de un array.
NoClassDefFoundException Se referenció una clase que el
sistema es incapaz de encontrar.
ArrayIndexOutOfBoundsExceptionSe genera al intentar acceder a un
elemento de un array más allá de los límites definidos inicialmente para ese
array.
Gestión de
Errores
UnsatisfiedLinkException Se intenta de acceder a un método
nativo que no existe. InternalException
Este error se reserva para eventos que no deberían ocurrir. Por definición, el
usuario nunca debería ver este error y esta excepción
no debería lanzarse.
También el programador puede lanzar sus propias excepciones, extendiendo la clase System.exception.
Por ejemplo, considérese un programa cliente/servidor. El código cliente se intenta conectar al servidor, y durante 5 segundos se espera a que conteste el servidor. Si el servidor no responde, el servidor lanzaría la excepción de time-out
Gestión de Errores
Gestión de
Errores
class ServerTimeOutException extends Exception {}public void conectame( String nombreServidor ) throws Exception { int exito; int puerto = 80; exito = open( nombreServidor,puerto ); if( exito == -1 ) throw ServerTimeOutException; }
Excepciones Predefinidas
public void encuentraServidor() {try { conectame( servidorDefecto ); catch( ServerTimeOutException e ) { g.drawString( "Time-out del Servidor, intentando alternativa",5,5 ); conectame( servidorAlterno ); }}
Gestión de Errores
Excepciones Propias
Gestión de
Errores
Las excepciones lanzadas por un método que pueda hacerlo deben recoger en bloque try/catch o try/finally.
tryEs el bloque de código donde se previene que se genere una excepción. El bloque try tiene que ir seguido, al menos, por una cláusula catch o una
cláusula finally.
try { // Sentencias Java
}
Gestión de
Errores
catchEs el código que se ejecuta cuando se produce la excepción. No hay código alguno entre un bloque try y un bloque catch, ni entre bloques catch. La
sintaxis general de la sentencia catch en Java es la siguiente:
catch( UnTipoTrhowable nombreVariable ) { // sentencias Java
}
Gestión de
Errores
tryEs el bloque de código que se ejecuta siempre,
haya o no excepción. Este bloque finally puede ser útil cuando no hay ninguna excepción. Es un trozo de código que se ejecuta independientemente de lo
que se haga en el bloque try.
Gestión de
Errores
throwLa sentencia throw se utiliza para lanzar
explícitamente una excepción. En primer lugar se debe obtener un descriptor de un objeto Throwable, bien mediante un parámetro en una cláusula catch o, se puede crear utilizando el operador new. La
forma general de la sentencia throw es:throw ObjetoThrowable;
Gestión de
Errores
throwsSi un método es capaz de provocar una excepción que no maneja él mismo, debería especificar este comportamiento, para que todos los métodos que
lo llamen puedan colocar protecciones frente a esa excepción. La palabra clave throws se utiliza para identificar la lista posible de excepciones que un
método puede lanzar.
Gestión de
Errores
public class ValidacionNumero { public static void main(String[] args) { boolean esNumero = false; int nro = 0; String txtNro = null; do{ txtNro = JOptionPane.showInputDialog("Ingrese un nro. "); try{ nro = Integer.parseInt(txtNro); esNumero = true; }catch(NumberFormatException nfe){ System.out.println("ERROR. No ha ingresado un nro."); } }while(esNumero == false); JOptionPane.showMessageDialog(null, "El nro ingresado fue el: " + nro, "Resultado", JOptionPane.INFORMATION_MESSAGE); System.exit(0); }}.