Excepciones en Java

Hola a todos, hoy os explicare como podemos tratar las excepciones en Java.

Una excepción es un evento producido en la ejecución de un programa que interrumpe el flujo normal de instrucciones. Por ejemplo, si manejamos ficheros, es posible que el fichero no exista en la ruta indicada, la sintaxis es correcta, pero en tiempo de ejecución no puede realizar la acción.

La clase encargada controlar excepciones esta en java.io.

Para capturar una excepción, debemos usar try-catch, esta es su sintaxis:

try{
   //acciones
}catch(clase_maneja_excepciones variable){
   //acciones
}

La idea es que cuando el código que esta dentro del bloque try produce una excepción, se interrumpe el flujo y pasa al bloque catch, aquí ya hacemos las operaciones que queramos, normalmente se suelen escribir un mensaje informando del tipo de error, vamos a ver un ejemplo:

import java.io.IOException;
import java.io.FileReader;
public class ExcepcionApp {

	public static void main(String[] args) {

		try{
			//si el nombre del fichero no existe, lanza el catch
			FileReader fr=new FileReader("casa");

			//Esta linea no se ejecuta
			System.out.println("No veras este mensaje");
		}catch(IOException e){
			System.out.println("Error E/S: el fichero no existe");
		}

	}

}

Si no se produce ninguna excepción, no pasara al bloque catch.

Podemos poner más de un bloque catch para manejar distintas excepciones mas concretas. Pondremos primero, las excepciones mas especificas a las mas generales. Por ejemplo:

import java.io.IOException;
import java.io.FileReader;
import java.io.FileNotFoundException;
public class ExcepcionApp {

	public static void main(String[] args) {

		FileReader fr=null;
		try{
			//si el nombre del fichero no existe, lanza el catch
			fr=new FileReader("casa");

			//Esta linea no se ejecuta
			System.out.println("No veras este mensaje");
		}catch(FileNotFoundException e){
			System.out.println("Error E/S: el fichero no existe");
		}
		catch(IOException e){
			System.out.println("Si el fichero no existe, este mensaje no se vera");
		}

	}

}

También tenemos podemos añadir un bloque finally después del bloque catch, este nos permitirá que se produzca o no una excepción se ejecute lo que haya en este bloque. Veamos un ejemplo:

import java.io.IOException;
import java.io.FileReader;
public class ExcepcionApp {

	public static void main(String[] args) {

		FileReader fr=null;
		try{
			//si el nombre del fichero no existe, lanza el catch
			fr=new FileReader("casa");

			//Esta linea no se ejecuta
			System.out.println("No veras este mensaje");
		}catch(IOException e){
			System.out.println("Error E/S: el fichero no existe");
		}finally{
			System.out.println("Este mensaje siempre se ejecutara");
		}

	}

}

Si realizas en el bloque finally alguna accione que pueda producir una excepción, deberás insertar un try-catch.

¿Pero que pasa cuando se produce un excepción en un método que es llamado desde un try-catch de otro método o del main? Podemos “lanzar” las excepciones que se produzcan a un nivel superior, es decir, donde son llamados. Esto se indica con la palabra throws clase_maneja_excepciones. La mayor ventaja es que no tenemos que controlar las excepciones en ese método.

Veamos un ejemplo:

import java.io.IOException;
import java.io.FileReader;
public class ExcepcionApp {

	public static void main(String[] args) {

		try{

			prueba();

			//Esta linea no se ejecuta
			System.out.println("No veras este mensaje");

		}catch(IOException e){
			System.out.println("Error E/S: el fichero no existe");
		}

	}
	public static void prueba() throws IOException{

		//Lanzara una excepcion, pero se lanza en el try-catch del main
		FileReader fr=new FileReader("casa");

	}

}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

¿Te ha gustado y quieres apoyarme? ¡Sé mi patrón!
Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *