JavaRush /Blog Java /Random-ES /Excepciones y su manejo.
articles
Nivel 15

Excepciones y su manejo.

Publicado en el grupo Random-ES
Las excepciones o situaciones excepcionales (estados) son errores que ocurren en un programa durante su funcionamiento. Todas las excepciones en Java son objetos. Por tanto, pueden generarse no sólo de forma automática cuando se produce una situación excepcional, sino también creados por el propio desarrollador. Jerarquía de clases de excepción: Excepciones y su manejo - 1las excepciones se dividen en varias clases, pero todas tienen un ancestro común: la clase Throwable. Sus descendientes son las subclases Exceptiony Error. Las excepciones ( Exceptions) son el resultado de problemas en un programa que son, en principio, solucionables y predecibles. Por ejemplo, la división por cero se produjo en números enteros. Los errores ( Errors) son problemas más serios que la especificación de Java establece que no debe intentar manejar en su propio programa porque son problemas a nivel de JVM. Por ejemplo, se producen excepciones de este tipo si la memoria disponible para la máquina virtual se ha agotado. El programa aún no podrá proporcionar memoria adicional para la JVM. En Java, todas las excepciones se dividen en tres tipos: excepciones marcadas ( checked) y excepciones no marcadas ( unchecked), que incluyen errores ( Errors) y excepciones de tiempo de ejecución ( RuntimeExceptionsclase descendiente Exception). Las excepciones controladas son errores que pueden y deben manejarse en un programa; todos los descendientes de una clase Exception(excepto RuntimeException) pertenecen a este tipo. El manejo de excepciones se puede realizar mediante operadores try…catcho transferirse a la parte externa del programa. Por ejemplo, un método puede pasar excepciones que ocurren en un nivel superior en la jerarquía de llamadas sin manejarlo él mismo. Las excepciones no marcadas no requieren manejo, pero puedes manejar excepciones de clase si lo deseas RuntimeException. Compilemos y ejecutemos el siguiente programa:

class Main { 
     public static void main(String[] args) { 
         int a = 4; 
         System.out.println(a/0); 
     } 
}
Cuando se inicie, se mostrará el siguiente mensaje en la consola:

Exception in thread "main" java.lang.ArithmeticException: / by zero 
        at Main.main(Main.java:4)
El mensaje muestra la clase de excepción que ocurrió: ArithmeticException. Esta excepción se puede manejar:

class Main { 
     public static void main(String[] args) { 
         int a = 4; 
         try { 
              System.out.println(a/0); 
         } catch (ArithmeticException e) { 
              System.out.println("Произошла недопустимая арифметическая операция"); 
         } 
     } 
}
Ahora, en lugar de un mensaje de error estándar, se ejecutará un bloque catchcuyo parámetro es el objeto e de la clase correspondiente a la excepción (al objeto en sí se le puede dar cualquier nombre, será necesario si queremos lanzar con fuerza esta excepción nuevamente, por ejemplo, para que sea verificada por algún otro controlador). En este caso, el bloque trycontiene el fragmento del programa donde potencialmente podría ocurrir una excepción. Uno trypuede corresponder a varios bloques catch con diferentes clases de excepción.

import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
     int[] m = {-1,0,1}; 
        Scanner sc = new Scanner(System.in); 
        try { 
            int a = sc.nextInt();     
            m[a] = 4/a; 
            System.out.println(m[a]); 
        } catch (ArithmeticException e) { 
            System.out.println("Произошла недопустимая арифметическая операция"); 
        } catch (ArrayIndexOutOfBoundsException e) { 
            System.out.println("Обращение по недопустимому индексу массива"); 
        } 
    } 
}
Si, después de iniciar el programa presentado, el usuario ingresa desde el teclado 1 o 2, el programa se ejecutará sin crear excepciones. Si el usuario ingresa 0, se producirá una excepción de clase ArithmeticExceptiony será manejada por el primer bloque catch. Si el usuario ingresa 3, se producirá una excepción de clase ArrayIndexOutOfBoundsException(matriz fuera de límites) y será procesada por el segundo bloque catch. Si el usuario ingresa un número no entero, por ejemplo, 3.14, se producirá una excepción de clase InputMismatchException(el tipo de entrada no coincide) y se generará en el formato de error estándar, ya que no lo manejamos de ninguna manera. Sin embargo, puede agregar un controlador para la clase Exception, dado que esta clase es la clase principal para todas las demás excepciones marcadas, detectará cualquiera de ellas (incluida InputMismatchException).

import java.util.Scanner; 
class Main { 
    public static void main(String[] args) { 
        int[] m = {-1,0,1}; 
        int a = 1; 
        Scanner sc = new Scanner(System.in);        
        try { 
            a = sc.nextInt();     
            m[a-1] = 4/a;
            System.out.println(m[a]); 
        } catch (ArithmeticException e) { 
            System.out.println("Произошла недопустимая арифметическая операция"); 
        } catch (ArrayIndexOutOfBoundsException e) { 
            System.out.println("Обращение по недопустимому индексу массива");       
        } catch (Exception e) { 
            System.out.println("Произошло ещё Cómoое-то исключение"); 
        } 
    } 
}
Dado que las excepciones se basan en una jerarquía de clases y subclases, primero debe intentar manejar excepciones más específicas y solo luego las más generales. Es decir, si colocamos el bloque con manejo de excepciones de clase en primer lugar (y no en tercer lugar) Exception, nunca veríamos ningún mensaje de error que no sea "Se ha producido alguna otra excepción" (todas las excepciones serían detectadas inmediatamente por este bloque y no llegarían al descansar). Una adición opcional a los bloques try…catchpuede ser un bloque finally. Los comandos colocados en él se ejecutarán en cualquier caso, independientemente de si se produce una excepción o no. A pesar de que cuando ocurre una excepción no controlada, la parte del programa que queda después de la generación de esta excepción no se ejecuta. Por ejemplo, si se produjo una excepción durante algunos cálculos prolongados, finallypuede mostrar o guardar resultados intermedios en un bloque. Enlace a la fuente: Excepciones y su manejo
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION