1. throwoperador

Cuando un bloque captura una excepción catch, y hasta que se lanza a la máquina Java, es solo un objeto que hereda Exception(o más bien, Throwable). El objeto de excepción en sí mismo no tiene propiedades mágicas.

Toda la lógica de cómo funcionan las excepciones es solo una forma especial en que la máquina Java se comporta cuando se le lanza una excepción.

Siempre puede volver a generar una excepción detectada en la máquina Java. Para hacer esto, necesita usar el throwoperador:

throw exception;

Ejemplo:

Código Salida de consola
try
{
   int d = 2/0;
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

En este código, detectamos una excepción, mostramos un mensaje al respecto en la pantalla y luego la volvimos a generar.

Una excepción que se vuelve a generar no puede ser capturada por otros catchbloques en el mismo trybloque.


2. Sus excepciones

Por cierto, puede crear un objeto de excepción usted mismo: es solo un objeto cuyo tipo es Exceptiono una clase que lo hereda. Y tirarlo.

Es más fácil de lo que parece. Ejemplo:

Código Salida de consola
try
{
   throw new RuntimeException();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
Caught the exception

En el ejemplo anterior, creamos un nuevo objeto de excepción cuyo tipo es RuntimeExceptione inmediatamente lo lanzamos usando el throwoperador.

El bloque lo atrapará de inmediato catch, ya que RuntimeException hereda Exception. El catch (Exception except)código captura objetos de excepción de todas las clases que heredan la Exceptionclase.



3. finallypalabra clave

Otro punto importante. A veces, un programador necesita realizar alguna acción independientemente de si se produjo una excepción en el código. Por ejemplo, supongamos que abrimos un archivo para escribir. El archivo abierto debe cerrarse llamando a close().

try
{
   // Code where an exception might occur
}
catch(ExceptionType name)
{
   // Exception handling code
}
finally
{
   // Code that must executed no matter what happens
}

Para realizar estas acciones obligatorias, finallyse agregó otro tipo de bloque ( ) a la try-catchconstrucción, creando así la try-catch-finallyconstrucción. Se parece a esto:

Ejemplo:

FileInputStream source = null;
try
{
   source = new FileInputStream("c:\\note.txt");
   source.read();
}
catch(Exception except)
{
   System.out.println("Caught the exception");
   throw except;
}
finally
{
   if (source != null)
      source.close();
}

El código del finallybloque se ejecutará en cualquier caso, independientemente de si hubo una excepción. Incluso si se lanza una excepción y no se captura, el finallybloque seguirá ejecutándose.

Por cierto, si no desea capturar una excepción, pero necesita un finallybloque, use la notación abreviada para la try-catch-finallyconstrucción: un try-finallybloque. Se ve algo como esto:

try
{
   // Code where an exception might occur
}
finally
{
   // Code that must executed no matter what happens
}