Excepciones (Exception) en Java, con ejemplos


En Java los errores en tiempo de ejecución (cuando se esta ejecutando el programa) se denominan excepciones, y esto ocurre cuando se produce un error en alguna de las instrucciones de nuestro programa, como por ejemplo cuando se hace una división entre cero,  cuando un objeto es 'null' y no puede serlo, cuando no se abre correctamente un fichero, etc. Cuando se produce una excepción se muestra en la pantalla un mensaje de error y finaliza la ejecución del programa.

En Java (al igual que en otros lenguajes de programación), existen mucho tipos de excepciones y enumerar cada uno de ellos seria casi una labor infinita. En lo referente a las excepciones hay que decir que se aprenden a base experiencia, de encontrarte con ellas y de saber solucionarlas.

Cuando en Java se produce una excepción se crear un objeto de una determina clase (dependiendo del tipo de error que se haya producido), que mantendrá la información sobre el error producido y nos proporcionará los métodos necesarios para obtener dicha información. Estas clases tienen como clase padre la clase Throwable, por tanto se mantiene una jerarquía en las excepciones. A continuación mostramos algunas de las clases para que nos hagamos una idea de la jerarquía que siguen las excepciones, pero existen muchísimas más excepciones que las que mostramos:

Exception_jarroba_diagramClass

A continuación vamos a mostrar un ejemplo de como al hacer una división entre cero, se produce una excepción. Veamos la siguiente imagen en el que podemos ver un fragmento de código y el resultado de la ejecución del código:

Exception_1_java_jarroba

Como vemos en nuestro programa tenemos 3 instrucciones. La primera debe de imprimir por pantalla el mensaje "ANTES DE HACER LA DIVISIÓN", la segunda debe de hacer la división y la última debe de imprimir por pantalla el mensaje "DESPUES DE HACER LA DIVISIÓN". La primera instrucción la ejecuta perfectamente, pero al llegar a la segunda se produce una "ArithmeticException" (excepción de la clase ArithmeticException) y se detiene la ejecución del programa ya que estamos dividiendo un número entre '0'.

Por suerte Java nos permite hacer un control de las excepciones para que nuestro programa no se pare inesperadamente y aunque se produzca una excepción, nuestro programa siga su ejecución. Para ello tenemos la estructura "try – catch – finally" que la mostramos a continuación:

try {

	// Instrucciones cuando no hay una excepción

} catch (TypeException ex) {

	// Instrucciones cuando se produce una excepcion

} finally {

	// Instruciones que se ejecutan, tanto si hay como sino hay excepciones

}

Respecto a la estructura "try – catch – finally", se ha de decir que primero se ejecuta el bloque "try", si se produce una excepción se ejecuta el bloque "catch" y por último el bloque "finally". En esta estructura se puede omitir el bloque "catch" o el bloque "finally", pero no ambos.

Sabiendo esta estructura, podemos reescribir nuestro programa para que se ejecuten las tres instrucciones aunque se produzca una excepción. Previamente debemos de saber cual va a ser la clase de la excepción que puede aparecer que seria la "ArithmeticException" para definirla en la parte del "catch". Nuestro programa quedaría de la siguiente forma y se ejecutaría sin problema obteniendo también la información de la excepción:

Exception_2_java_jarroba

Como vemos capturamos la excepción en un objeto "ex" de la clase "ArithmeticException" y podemos obtener el mensaje de error que nos da la excepción. Vemos también que el programa termina su ejecución aunque se haya producido una excepción.

Dentro de una misma estructura podemos definir todas las excepciones que queramos. En el caso anterior hemos definido solo la excepción "ArithmeticException"; pero por ejemplo, podemos definir también la excepción "NullPointerException", por si nos viene un valor a 'null' al hacer la división:

 Exception_3_java_jarroba

En resumen, hemos puesto en esta entrada un ejemplo muy sencillo para controlar un par de excepciones bastante obvias como la división entre '0' y un 'null', que perfectamente lo podríamos haber controlado con una sentencia de control "if" mirando el contenido de los atributos, pero la finalidad de esta entrada era ver como controlar las excepciones con la estructura "try – catch – finally", que si lo sabemos utilizar nuestro programa deberá seguir funcionando aunque se produzcan excepciones. Decir también que es casi imposible aprenderse todas las excepciones que hay en Java (así que no os pongáis a empollarlas una a una porque igual no utilizareis ni el 10% de las que hay) ya que estas las iréis aprendiendo según os las vayáis encontrando en vuestros desarrollos. Estas que os hemos mostrados son bastante comunes al igual que las que os podéis encontrar con el tratamiento de ficheros, de arrays, etc.

Comparte esta entrada en:
Safe Creative #1401310112503
Excepciones (Exception) en Java, con ejemplos por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

13 comentarios en “Excepciones (Exception) en Java, con ejemplos”

    1. Podrías utilizar una expresión regular como:

      contieneSoloLetras = textoSoloLetrasPermitidas.matches(“[a-zA-Z]*”)

  1. hola, como hago un try catch, cuando el menu es  

    System.out.println(" Menu de opciones")

     System.out.println("1. inscribir materia (recuerde que debe registrar primero profesor)");             System.out.println("2. inscribir profesor");             System.out.println("3. inscribir estudiante");             System.out.println("4. Calificar.");             System.out.println("5. mostrar todos los registros profesores / estudiantes/ notas");             System.out.print("Digite su opción:"); y lo leo así  switch (scanf.nextInt()) ayuda ?

  2. Tengo esta Clase 

    import java.util.Scanner;

    public class Teclado{

        private static Scanner sc;
        

        
        public static int leerEntero()
        {
            sc = new Scanner( System.in );  
            return sc.nextInt();
        }

        
        public static float leerFlotante()
        {
            sc = new Scanner( System.in );
            return sc.nextFloat();
        }

        public static double leerDoble()
        {
            sc = new Scanner( System.in );
            return sc.nextDouble();
        }

        
        public static String leerCadena()
        {
            sc = new Scanner( System.in );
            return sc.nextLine();
        }

        public static char leerCaracter()
        {
            sc = new Scanner( System.in );
            return sc.next().charAt( 0 );  
        }

     

    como hago las excepciones para que si en ves de poner un numero pone una letra aparezca un msj de "introduce un numero" y viceversa ??

    porfa ayudenme 

    apenas comienzo a aprender 

    y diseñe esta clase teclado para usarla en todas mis apps por el momento

    1. Cuando detectes que la entrada no es válida simplemente throw, como por ejemplo:

      if (es_entrada_no_valida){

      throw new Exception();

      }

  3. Gracias por el ejemplo, me ha servido de mucho. Me podrias ayudar con un problema? si por error tecleo una letra en lugar de un número, sabes cuál sería la excepción que debo poner en el catch?

    1. Hola Elsa.

      Esa excepción se hace con “NumberFormatException”, que lo que hace es que sino es un número te lanza una excepción.

      SL2

Deja un comentario

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

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR