CAPTURA DE EXCEPCIONES EN JAVA
CAPTURA DE EXCEPCIONES EN JAVA
Un manejador de excepciones es una porción de código que se va a encargar de tratar las posibles excepciones que se puedan generar. En Java, de forma similar a C++ se pueden tratar las excepciones previstas por el programador utilizando unos mecanismos, los manejadores de excepciones, que se estructuran en tres bloques:
- El bloque try: Lo primero que hay que hacer para que un método sea capaz de tratar una excepción generada por la máquina virtual Java es encerrar las instrucciones susceptibles de generarla en un bloque try.
try {
Bloque de Instrucciones
}
Cualquier excepción que se produzca dentro del bloque try será analizado por el bloque o bloques catch que se verá en el punto siguiente. En el momento en que se produzca la excepción, se abandona el bloque try y, por lo tanto, las instrucciones que sigan al punto donde se produjo la excepción no serán ejecutadas. Cada bloque try debe tener asociado al menos un bloque catch.
- b. El bloque catch: Por cada bloque try pueden declararse uno o varios bloques catch, cada uno de ellos capaz de tratar un tipo de excepción.
try {
Bloque de Instrucciones
} catch (TipoExcepción nombreVariable) { Bloque de Instrucciones del primer catch
} catch (TipoExcepción nombreVariable) {
} …
Bloque de Instrucciones del segundo catch
Para declarar el tipo de excepción que es capaz de tratar un bloque catch, se declara un objeto cuya clase es la clase de la excepción que se desea tratar o una de sus superclases.
Ejemplo:
class ExcepcionTratada {
public static void main(String[] arg) {
int i=5; j=0;
try {
int k=i/j;
System.out.println(“Esto no se va a ejecutar”);
}catch (ArithmeticException ex) {
System.out.println(“Has intentado dividir por cero”);
}
System.out.println(“Fin del programa”);
}
}
- c. El bloque finally (no existente en C++): El bloque finally se utiliza para ejecutar un bloque de instrucciones sea cual sea la excepción que se produzc Este bloque se ejecutará en cualquier caso, incluso si no se produce ninguna excepción. Sirve para
no tener que repetir código en el bloque try y en los bloques catch.
try {
}
Bloque de Instrucciones del try
catch (TipoExcepción nombreVariable) {
Bloque de Instrucciones del primer catch
}
catch (TipoExcepción nombreVariable) {
Bloque de Instrucciones del segundo catch
} …..
}
finally {
Bloque de Instrucciones de finally
}
Todos los métodos Java utilizan la sentencia throw para lanzar una excepción. Esta sentencia requiere un sólo argumento (un objeto Throwable).
Este programa lee un fichero (fichero.txt), y lee su contenido en forma de números.
Si alguno de los números leídos es negativo, lanza una excepción MiExcepcion. Además gestiona la excepción IOException, que es una excepción de las que Java incluye y que se lanza si hay algún problema en una operación de entrada/salida.
Ambas excepciones son gestionadas, imprimiendo su contenido (cadena de error)
por pantalla.
// Creo una excepción personalizada class MiExcepcion extends Exception {
MiExcepcion(){
super(); // constructor por defecto de Exception
}
MiExcepcion( String cadena ){
super( cadena ); // constructor param. de Exception
}
}
// Esta clase lanzará la excepción class Lanzadora {
void lanzaSiNegativo( int param ) throws MiExcepcion {
if ( param < 0 )
throw new MiExcepcion( “Numero negativo” );
}
}
class Excepciones {
public static void main( String[] args ) {
// Para leer un fichero
Lanzadora lanza = new Lanzadora(); FileInputStream entrada = null;
int leo;
try {
entrada = new FileInputStream( “fich.txt” ); while ( ( leo = entrada.read() ) != -1 ) lanza.lanzaSiNegativo( leo ); entrada.close();
System.out.println( “Todo fue bien” );
} catch ( MiExcepcion e ){ // Personalizada
System.out.println( “Excepción: ” + e.getMessage() );
} catch ( IOException e ){ // Estándar
System.out.println( “Excepcion: ” + e.getMessage() );
} finally {
if ( entrada != null )
try {
entrada.close(); // Siempre queda cerrado
} catch ( Exception e ) {
System.out.println( “Exception: ” + e.getMessage() );
}
System.out.println( “Fichero cerrado.” );
}
}
}
La salida de este programa, suponiendo un número negativo sería:
Excepción: Numero negativo
Fichero cerrado
En el caso de que no hubiera ningún número negativo sería:
Todo fue bien
Fichero cerrado
En el caso de que se produjese un error de E/S, al leer el primer número, sería:
Excepción: java.io.IOException
Fichero cerrado
Si quieres seguir aprendiendo con nosotros, puedes ingresar a nuestros