CONCEPTO DE EXCEPCIONES

Una excepción es un proceso usado para describir algo que no esperaba que funcionara de esa manera. Por lo regular las excepciones se ejecutan cuando el código ha generado un error.

Un error en un código de java puede ser por ejemplo, provocado por la llamada a un método con datos no validos, abrir un archivo que no existe, fallo en la conexión de Internet, division por cero, etc.

CLASES DE EXCEPCIONES

Las excepciones son subclases de java.lang.Throwable. Funcionan como indicadores o señales para identificar cuando el código deja de comportarse normalmente y como puede manejarse para continuarlo.

Las excepciones pueden ser nombradas para identificarlas, están las predefinidas por el sistema Java y las definidas por el programador. Se expresa que las excepciones son elevadas(raised) o lanzadas (thrown) en el punto donde generan una interrupción en el curso normal del código. También se dice que pueden ser manipuladas (handled) o capturadas (caught) en el punto donde se reanuda la ejecución normal del código.

Java nos trae dos clases de excepciones que podemos manejar, las comprobadas y las no comprobadas.

Las excepciones comprobadas, son aquellas que se espera que el programador identifique y arregle en el programa, se generan por causas externas que pueden alterar el programa en tiempo de ejecución, por poner un ejemplo no encontrar un archivo.

Las excepciones no comprobadas proceden de errores del codigo, estas son difíciles de identificar por que el compilador o la JVM no le esta indicando en algún momento al programador que la verifique o que haga algo para corregirla cuando se produce.

De las excepciones que no son comprobadas tenemos las que se deben a errores en el código, también llamadas errores de tiempo de ejecución. Un ejemplo es el ejecutar un array vacío.

Las excepciones que son dificiles de recuperar debido a errores en el entorno se denominan errores, a este tipo de excepciones pertenecen situaciones como memoria ocupada

  • Excepciones comprobadas
  • Excepciones no comprobadas
    • Excepciones en tiempo de ejecución.
    • Errores.

Como todo en Java son clases y objetos, las excepciones en java se maneja como objetos segun su tipo:

  • Clase Exception: Representa excepciones comprobadas y no comprobadas. Efectua una continuacion del código, manejandolo por una modificacion de código en vez de terminar el programa. Es causado por efectos del entorno y puede gestionarse debido a que en la mayoria de las veces son errores ocacionados por el usuario del programa.
  • Clase Error: Es usada para condiciones de error graves, no comprobadas, cuando esto sucede no debe esperar que el programa responda correctamente o intente recuperarse.
  • Clase RuntimeException: Es usada en excepciones no comprobadas que pueden ser resultantes de codigo defectuoso. Cuando este tipo de excepción sucede trate de mantener el programa ejecutandose. Este tipo de excepciones indican un problema de diseño o implementacion, por lo regular un programa que funcione bien no genera este tipo de excepciones, por lo que no es recomendable gestionarlos
Hay dos alternativas para manejar las excepciones, una es detectar el error y permitir que la clase lo maneje, o dos, reenviar la excepcion al metodo que la invoco para indicar que se trata de un error.

REGLAS DE GESTION DE EXCEPCIONES

Para efectuar que el código permanezca siempre en funcionamiento y sea estable y mantenga su calidad, el lenguaje Java exige una excepcion comprobada ( Clase Exception) en un determinado punto del código.

El metodo que va a contener la excepcion debe definir la accion a realizar en el justo lugar donde se produce el problema, para gestionarlo puede efectuar cualquiera de las siguientes opciones:

  1. Un bloque try-catch-finally.
    la clausula catch debe contener la excepcion que debe manejar o una superclase, aunque la clausula este vacia.
  2. Declarar Excepciones que un método puede generar:
    Significa que el metodo devuelve la excepcion al metodo que lo generó, esto es declarar en el código que no lo va a gestionar y le deja esa responsabilidad al método.

THROW Y THROWS

Ya que las excepciones son objetos hay una manera de llamar a un objeto de este tipo:

throw e = new Exception();

Es distinto de llamar la sentencia throws en un método:

static void llamadaMetodo( argumentos ) throws TipoException {
 codigo;
 codigo;
 codigo;
}

Si un método esta generando una excepción comprobada y no la puede capturar entonces debe declarar en el método la sentencia. 

Las excepciones comprobadas deben ser declararas o de lo contrario el código no va a compilar.

COMO MANEJAR CODIGO CON EXCEPCIONES  (try / catch)

El lenguaje Java me permite averiguar la excepcion que se generó y como debe resolverla, con manejadores. Si el manejador es invocado despues de que el codigo ha efectuado una parada en la que ocurre una excepcion entonces el código que contiene el manejador es ejecutado permitiendo continuidad del programa.

El manejador se efectua mendiante la combinacion de sentencias try {} catch {}:

try{
     // curso normal del codigo;
     //codigo ejecutable en cualquier circunstancia;
}
catch (IOException ex_01){
     //codigo para manejar una excepcion de tipo IOException presente en el programa;
}
catch (Exception ex_02){
     //codigo para manejar una excepcion de tipo Exception presente en el programa;
}

Como ven pueden anidarse diferentes tipos de catch para manejar las excepciones presentes en el programa, aqui puede entenderse la logica del curso, el JVM interpretará el primer catch para manejar la excepcion, sino lo puede manejar entonces seguira con el segundo y asi sucesivamente. Debe tener presente ordenar los manejadores catch para poder efectuar las capturas de las excepciones lo mas óptimo posible.

LA SENTENCIA FINALLY

Java tambien tiene la sentencia finally:

try{
     // curso normal del codigo;
     //codigo ejecutable en cualquier circunstancia;
}
catch (IOException ex_01){
     //codigo para manejar una excepcion de tipo IOException presente en el programa;
}
finally{
     //codigo para manejar una excepcion de tipo Exception presente en el programa;
}

La sentencia finally define un bloque de código que siempre se ejecuta, independientemente se efectué la captura de la excepción o. no.

De la unica forma en que una sentencia finally no se ejecute seria en una JVM caida o cerrada ( por ejemplo la ejecucion del método System.exit).

EXCEPCIONES MAS COMUNES

  • NullPointerException: indica que se esta tratando de acceder a un atributo o un método de un objeto que no hace referencia a nada o null.
  • FileNotFoundException: Esta excepcion se genera por intentar leer datos de un archivo que no existe.
  • NumberFormatException: Indica que el formato del numero que esta leyendo no corresponde a uno válido.
  • ArithmeticException: Mas comunmente cuando se hace una division por cero (x/0).
  • SecurityException: Normalmente se genera en Browsers ( Navegadores de internet) por applets de Java que intentan ralizar una operacion
0 Responses

Publicar un comentario