HTMLpointHTMLpoint HTMLpoint.com


 Indicaciones sobre las excepciones y sobre los thread



Las excepciones son una forma clara para controlar los errores sin confundir el código con muchas instrucciones de control del error. Cuando se verifica un error se pone en marcha una excepción que, si se recibe enseguida, nos permite gestionar un error. De lo contrario, el soporte lleva a cabo como ejecución de Java, un íter de default.
En Java hay una clase que se llama Exception, y las excepciones son objetos que pertenecen a esta clase. Por eso, se pueden trabajar como verdaderos componentes del lenguaje.
Vamos a ver cómo es posible crear una excepción.
Hay que crear una clase que amplía Throwable, o mejor Exception , que es una extensión de Throwable. Supongamos que queremos crear una excepción para decir que utilizamos una cadena vacía: tendremos que escribir:

public clase ErrorCadenaVacía amplía Exception
{
ErrorCadenaVacía()
{
super("Cuidado, estás utilizando una cadena que no ha sido inicializada");
}
}


Esta clase tiene que estar en un archivo que se llama como la clase, es decir, ErrorCadenaVacía.java Después de haberla creado, necesitaremos una forma para hacerla trabajar, es decir, para evidenciar la situación de error que, ya que estamos, espero que alguien recoja. Las excepciones trabajan con la instrucción throw que tiene que estar en un método que, a su vez, se tiene que declarar con un cláusola throws. Por ejemplo, en nuestro caso, si quiero crear un método para imprimir la cadena que controla incluso el error, escribiré en mi clase:

public void Imprimir (Cadena a)
throws ErrorCadenaVacía /* ß Esto quiere decir que esta función puede poner en marcha una excepción del tipo ErrorCadenaVacía*/
{
if (a==null) throw nuevo ErrorCadenaVacía();
else System.out.println(a);
}


Entonces, llegados a este punto, el método Imprimir enviará a la pantalla la cadena transformada en parámetro y dará un excepción de tipo ErrorCadenaVacía si el puntero era nulo.
La excepción que damos nosotros se llama excepción controlada y tiene que ser obligatoriamente gestionada, mientras las que da Java no necesariamente tienen que ser recogidas y gestionadas.
Ahora vamos a ver como recoger las excepciones, por ejemplo, nuestra ExcepciónCadenaVacía.
Las excepciónes se recogen cuando se solicitan los métodos que se declaran con la cláusula throws. Para recogerlas hay que implementar el método en bloques try que tienen la siguiente sintaxis:

try
BLOQUE // Éste es un bloque peligros porque puede poner en marcha unas excepciones. catch (Tipo de Excepción que hay que coger)
BLOQUE // Éste es un bloque de restablecimiento. catch (Tipo de Excepción que hay que coger)
BLOQUE // Éste es un bloque de restablecimiento.
….
finally
BLOQUE


El corpus de esta instrucción se ejecuta hasta el final o hasta que aparezca una excepción. En caso de excepción, se analizan las cláusulas catch para ver si existe un administrador para esa excepción o para una de sus superclases. Si ninguna cláusula catch recoge esa excepción, ésta vuelve a lanzarse en el método que la ha provocado (que la ha ejecutado).
Si en el try hay una cláusula finally, su código se pone en marcha después de que se hayan completado todas las demás operaciones del try, independientemente de que ésta haya ejcutado una excepción o no. Por ejemplo, nuestro método Imprimir se puede invocar así:

Si X es la cadena que hay que imprimir:

try {Imprimir(X);}
catch (ErrorCadenaVacía e)
{System.out.println ("Lo siento");}


En este caso, si X es nulo, se pondrá en marcha la excepción y se recogerá; después se imprimirá la cadena Lo siento, si no X. Si escribiera Imprimir(X) fuera de la try, saldría error porque las excepciones que yo he causado tienen que ser recogidas. Esto obliga al programador a escribir código "bueno". Las excepciones de Java, en cambio, se pueden coger o no.
El ejemplo siguiente recoge el HolaMundo del primer capítulo que, si invocado sin parámetros, daba una excepción de ArrayIndexOutOfBoundsException, que, este vez, se gestiona;

clase HolaMundo
{

public static void main(Cadena[] args)
{

System.out.print ("Hola Mundo, soy el primer programa en Java");

Cadena Nombre;

Cadena Apellidos;

try {Nombre=args[0];}
catch (ArrayIndexOutOfBoundsException e)
{Nombre="No has introducido tu Nombre";}

;
try {Apellidos=args[1];}
catch (ArrayIndexOutOfBoundsException e)
{Apellidos="No has intruducido tus Apellidos";}
;

System.out.println ("de "+Nombre+" "+Apellidos);
}
}


Intenten ponerlo en marcha de las siguientes formas:

java HolaMundo Nombre Apellidos
java HolaMundo Nombre
java HolaMundo


y a ver lo que pasa. Hagan lo mismo con el HolaMundo del primer capítulo.



  Vuelva al inicio de la página