Resumen del sistema de excepciones de Java

Artículo de referencia: https://snailclimb.top/JavaGuide/#/
En Java, todas las excepciones tienen una clase Throwable de ancestro común en el paquete java.lang . Lanzable: hay dos subclases importantes: Excepción y Error, las cuales son subclases importantes del manejo de excepciones de Java, cada una de las cuales contiene una gran cantidad de subclases:
Inserte la descripción de la imagen aquí

Error:

Es un error que el programa no puede manejar, lo que significa un problema grave al ejecutar la aplicación. La mayoría de los errores no están relacionados con las acciones realizadas por el escritor del código, pero indican problemas con la JVM (Máquina virtual Java) cuando se ejecuta el código . Por ejemplo, Java Virtual Machine Error (Virtual MachineError), cuando la JVM ya no tiene los recursos de memoria necesarios para continuar la operación, se producirá OutOfMemoryError. Cuando se producen estas excepciones, la máquina virtual Java (JVM) generalmente elige terminar el subproceso.

Estos errores indican que la falla ocurrió en la máquina virtual o cuando la máquina virtual intentó ejecutar la aplicación, como Error de máquina virtual Java (Error de máquina virtual), error de definición de clase (NoClassDefFoundError), etc. Estos errores son indetectables porque están fuera de las capacidades de control y procesamiento de la aplicación, y la gran mayoría son condiciones que no están permitidas mientras se ejecuta el programa. Para una aplicación diseñada correctamente, incluso si se produce un error, no debe intentar tratar las condiciones anormales causadas por él. En Java, los errores se describen mediante subclases de error.

Excepción

Es una excepción que el programa en sí mismo puede manejar. La clase Exception tiene una importante subclase RuntimeException. RuntimeException es lanzado por la máquina virtual Java. NullPointerException (la variable a la que se accede no hace referencia a ningún objeto, se lanza la excepción), ArithmeticException (excepción aritmética, un entero se divide por 0, se lanza la excepción) y ArrayIndexOutOfBoundsException (excepción de subíndice fuera de los límites).
De hecho, las excepciones pueden dividirse simplemente en excepciones de tiempo de ejecución y excepciones que no son de tiempo de ejecución.
Las excepciones que no son de tiempo de ejecución son excepciones distintas de RuntimeException , y todos los tipos pertenecen a la clase Excepción y sus subclases. Desde la perspectiva de la sintaxis del programa, es una excepción que debe manejarse. Si no se maneja, el programa no se puede compilar. Como IOException, SQLException, etc. y las excepciones definidas por el usuario, en circunstancias normales no comprueban las excepciones de forma personalizada, en términos simples, el compilador debe decirle que debe intentar ... las excepciones de captura son básicamente excepciones que no son de tiempo de ejecución, como las excepciones io, El archivo no se puede encontrar anormal, etc.

La excepción de tiempo de ejecución es RuntimeException , que generalmente es una excepción que puede ser generada lógicamente por un error. Es lanzada por la máquina virtual. El programa puede elegir capturarla o no manejarla. El programa debe evitar tales excepciones desde una perspectiva lógica. Ocurre, como un puntero nulo, un índice fuera de límites, una excepción de archivo no encontrado, etc.

Captura de excepción

  • bloque try: se usa para detectar excepciones. Puede ir seguido de cero o más bloques catch. Si no hay un bloque catch, debe ser seguido por un bloque finalmente.
  • catch block: se usa para manejar excepciones detectadas por try.
  • Finalmente bloque: si la excepción se detecta o se maneja, se ejecutará la instrucción en el último bloque. Cuando
    se encuentra una declaración de retorno en un bloque de prueba o un bloque de captura , el bloque de declaración finalmente se ejecutará antes de que regrese el método.

En los siguientes 4 casos especiales, el bloque finalmente no se ejecutará:

  1. Se produjo una excepción en la primera línea del bloque finalmente. Porque en otras líneas, finalmente el bloque aún se ejecutará

  2. Usó System.exit (int) en el código anterior para salir del programa. exit es una función con parámetros; si la instrucción es posterior a una instrucción anormal, finalmente se ejecutará

  3. El hilo donde se encuentra el programa muere.

  4. Apaga la CPU.

Nota: Cuando tanto la declaración try como la declaración finally tienen una declaración return, el contenido de la declaración finally se ejecutará antes de que regrese el método, y el valor de retorno de la declaración finally sobrescribirá el valor de retorno original. Como sigue:

   public static int f(int value) {
        try {
            return value * value;
        } finally {
            if (value == 2) {
                return 0;
            }
        }
    }

Si llama a f (2), el valor de retorno será 0, porque el valor de retorno de la declaración de fin sobrescribe el valor de retorno del bloque de la declaración de prueba.

Excepción personalizada

Código directamente

package test;

public class MyException {
    public static void main(String[] args) {
        demo d = new demo ();
        int a = 10;
        int b = -1;
        try {
            int div = d.div (a,b);
            System.out.println (div);
        }catch (fuShuException e){
            System.out.println ("除数为"+b);
            System.out.println (e.getMessage ());
        }

    }
}
class fuShuException extends Exception{
    fuShuException(String msg){
        super(msg);
    }
}
class demo {
    public int div(int a, int b)throws fuShuException{
        if( b<= 0){
          throw  new   fuShuException("除数不能为负数");
        }
        return a/b;
    }
}

Las excepciones personalizadas heredan directamente la clase Exception, reescriben el constructor si es necesario y luego usan la palabra clave throws para especificar excepciones donde las excepciones deben ser lanzadas

  1. Excepción personalizada:

    clase Exception nombre de clase extiende Exception
    {
    public Exception class name (String msg)
    {
    super (msg);
    }
    }

  2. Identificar posibles excepciones:

    lanza un nombre de clase de excepción

  3. Excepción de captura:

    try {}
    catch (Exception class name y) {}

  4. Explicación del método

    getMessage () // Salida de información anormal
    printStackTrace () // Imprimir seguimiento de montón

Publicado 39 artículos originales · ganado elogios 1 · vistas 4620

Supongo que te gusta

Origin blog.csdn.net/thetimelyrain/article/details/100006079
Recomendado
Clasificación