martes, 15 de abril de 2008

EXCEPCIONES

EXCEPCIONES

Las
excepciones son un mecanismo de algunos lenguajes de programación que permiten definir acciones a realizar en caso de producirse una situación anómala (excepción) producida durante la ejecución del programa.
http://www.tutorial-enlace.net/tutorial-Excepciones_en_programacion_Java-16909.html


Las excepciones son en realidad errores durante la ejecución. Si uno de esos errores se produce y no implementamos el manejo de excepciones, el programa sencillamente terminará abruptamente. Es muy probable que si hay ficheros abiertos no se guarde el contenido de los buffers, ni se cierren, además ciertos objetos no serán destruidos, y se producirán fugas de memoria.
http://www.mitecnologico.com/Main/ManejoDeExcepciones


¿Qué es el Manejo de Excepciones?

El manejo de excepciones es un mecanismo de algunos lenguajes de programación, que permite definir acciones a realizar en caso de producirse una situaciones anomala (excepción) producida durante la ejecución del programa.
La acción a realizar suele consistir en una acción correctiva, o la generación de un informe acerca del error producido.
Ejemplos de lenguajes con gestión de excepciones son Java, Net, C++, Objective-C, Ada, Eiffel, y Ocaml.

¿Como se implementa?


Los lenguajes con gestión de excepciones incorporan en sus bibliotecas la capacidad de detectar y notificar errores.
Cuando un error es detectado se siguen estas acciones:

Se interrumpe la ejecución del código en curso.
Se crea un objeto excepción que contiene información del problema. Esta acción es conocida como "lanzar una excepción".


Existe un mecanismo estandar de gestión de error
Si hay un manejador de excepciones en el contexto actual le transfiere el control. En caso contrario, pasa la referencia del objeto excepción al contexto anterior en la pila de llamadas.
Si no hay ningún manejador capaz de gestionar la excepción, el hilo que la generó es terminado.
Por ejemplo, si intentamos leer un fichero inexistente usando la clase FileReader del lenguaje Java, la implementación de la propia clase detectará el problema, y lanzará una excepción de tipo FileNotFoundException.

Por qué es importante usar excepciones?

El código de tratamiento del error está separado del resto del programa. Esto aumenta la legibilidad y permite centrarse en cada tipo de código.
Un mismo manejador puede gestionar las excepciones de varios ámbitos inferiores. Esto reduce la cantidad de código necesaria para gestionar los errores.
Existe un mecanismo estandar de gestión de error. Lenguajes anteriores como C empleaban el retorno de valores especiales en cada método para señalar condiciones anomalas. Esto implicaba que a cada llamada debía seguirle un código de gestión de errores que enturbiaba la legibilidad del código.

http://www.1x4x9.info/files/excepciones/html/online-chunked/index.html#N10028


Excepciones que incorpora Java 1.2

a.) Clases de Error

LinkageError: Una clase no satisface la dependencia que tiene respecto a otra.
· ClassCircularityError: Se detectó una herencia circular entre clases.
· ClassFormatError: Una clase cargada no ha sido incompletamente descrita.
o UnsupportedClassVersionError: La versión de una clase no es correcta.
· ExceptionInInitializerError: Error al iniciar un miembro static.
· IncompatibleClassChangeError: En una clase, su interfaz no es igual al declarado
o AbstractMethodError: Se ha invocado un método abstracto.
o IllegalAccessError: La aplicación intentó acceder a algún miembro no visible.
o InstantiationError: Se intentó instanciar una clase abstracta o interfaz.
o NoSuchFieldError: No se encontró determinado atributo.
o NoSuchMethodError: No se encontró determinado método.
· NoClassDefFoundError: No se encontró una clase cuando se necesitaba.

· UnsatisfiedLinkError: Se encontró un enlace insatisfecho en un método nativo.
· VerifyError: Se ha producido un error de verificación al cargar una clase.
ThreadDeath: Se ha lanzado en el thread víctima tras llamar a stop().
VirtualMachineError: La máquina virtual se ha averiado o quedado sin recursos.
· InternalError: Error interno en tiempo de ejecución.
· OutOfMemoryError: El lector ha agotado la memoria.
· StackOverflowError: Desbordamiento de pila. ¿Recursión infinita?.
· UnknownError: Grave error desconocido.

b.) Clases de Exception
CloneNotSupportedException: No se pudo copiar un objeto mediante clone().
IllegalAccessException: Algún método invocado es no visible.
InstantiationException: Se ha intentado instanciar una interfaz o una clase abstracta.
InterruptedException: Cuando se invoca a interrupt() sobre un thread dormido.
NoSuchFieldException: La clase no tiene un atributo con ese nombre.
NoSuchMethodException: La clase no tiene un método con ese nombre.

c.) Clases de RuntimeException

ArithmeticException: Error de cálculo (como división por cero...).
ArrayStoreException: Intento de almacenar un objeto equivocado en un vector.
ClassCastException: Intento de conversión inválida.
IllegalArgumentException: Se ha pasado un argumento inválido a un método:
· IllegalThreadStateException: Un thread no estaba en el estado adecuado.
· NumberFormatException: Una cadena contenedora de un número, no lo contiene.
IllegalMonitorStateException: Se ha usado wait/notify fuera de código sincronizado.
IllegalStateException: Método invocado en un momento inapropiado.
IndexOutOfBoundsException: Acceso a un vector fuera de sus límites:
· ArrayIndexOutOfBoundsException: Idem, para una matriz.
· StringIndexOutOfBoundsException: Idem, para una cadena.
NegativeArraySizeException: Intento de creación de un vector de tamaño negativo.
NullPointerException: Se ha usado una referencia null para acceder a un campo.
SecurityException: Algo ha sido vedado por el sistema de seguridad.
UnsupportedOperationException: Una operación invocada no se soporta.
Para más información véase la documentación del JDK que usted vaya a utilizar.

Las excepciones predefinidas y su jerarquia
quía de clases es la que se muestra en la figura:







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:

ArithmeticException

Las excepciones aritméticas son típicamente el resultado de una división por 0:int i = 12 / 0;
NullPointerException
Se produce cuando se intenta acceder a una variable o método antes de ser definido:class Hola extends Applet { Image img; paint( Graphics g ) { g.drawImage( img,25,25,this ); } }
IncompatibleClassChangeException
El 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.y = (Prueba)x; // dondex no es de tipo Prueba
NegativeArraySizeException
Puede ocurrir si hay un error aritmético al intentar cambiar el tamaño de un array.
OutOfMemoryException
¡No debería producirse nunca! El intento de crear un objeto con el operador new ha fallado por falta de memoria. Y siempre tendría que haber memoria suficiente porque el garbage collector se encarga de proporcionarla al ir liberando objetos que no se usan y devolviendo memoria al sistema.
NoClassDefFoundException
Se referenció una clase que el sistema es incapaz de encontrar.
ArrayIndexOutOfBoundsException
Es la excepción que más frecuentemente se produce. Se genera al intentar acceder a un elemento de un array más allá de los límites definidos inicialmente para ese array.
UnsatisfiedLinkException
Se hizo el intento de acceder a un método nativo que no existe. Aquí no existe un método a.kkclass A { native void kk(); }
y se llama a a.kk(), cuando debería llamar a A.kk().
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.
http://www.cica.es/formacion/JavaTut/Cap6/predef.html






EJEMPLO

import java.awt.*;


import java.applet.Applet;


public class HolaIte extends Applet {


private int i = 0;


private String Saludos[] = {


"Hola Mundo!",


"HOLA Mundo!",


"HOLA MUNDO!!" };


public void paint( Graphics g ) {


g.drawString( Saludos[i],25,25 );


i++;

} }


No hay comentarios: