1. throw
operador
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 throw
operador:
throw exception;
Ejemplo:
Código | Salida de consola |
---|---|
|
|
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 catch
bloques en el mismo try
bloque.
2. Sus excepciones
Por cierto, puede crear un objeto de excepción usted mismo: es solo un objeto cuyo tipo es Exception
o una clase que lo hereda. Y tirarlo.
Es más fácil de lo que parece. Ejemplo:
Código | Salida de consola |
---|---|
|
|
En el ejemplo anterior, creamos un nuevo objeto de excepción cuyo tipo es RuntimeException
e inmediatamente lo lanzamos usando el throw
operador.
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 Exception
clase.
3. finally
palabra 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, finally
se agregó otro tipo de bloque ( ) a la try-catch
construcción, creando así la try-catch-finally
construcció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 finally
bloque se ejecutará en cualquier caso, independientemente de si hubo una excepción. Incluso si se lanza una excepción y no se captura, el finally
bloque seguirá ejecutándose.
Por cierto, si no desea capturar una excepción, pero necesita un finally
bloque, use la notación abreviada para la try-catch-finally
construcción: un try-finally
bloque. Se ve algo como esto:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION