Comprender qué es una excepción de Java: notas de estudio de Java

Resumen de excepciones

La excepción de Java se refiere a una situación que no es coherente con la situación normal durante la ejecución del programa, y ​​esto eventualmente hará que la JVM se detenga de manera anormal.

En nuestro proceso de programación, siempre encontramos informes de errores de Java, y estos informes de errores generalmente se denominan excepción. De hecho, esto es en lenguajes de programación orientados a objetos como Java. La excepción en sí es una clase. Generar una excepción es crear un objeto de excepción y lanzar un objeto de excepción.

Clasificación de anomalías

La clase raíz de la excepción es java.lang.Throwable, que tiene dos subclases: java.lang.Error y java.lang.Exception,
Inserte la descripción de la imagen aquí

La
excepción marcada es una excepción comprobable , que se utiliza con mucha frecuencia al codificar. Todas las excepciones marcadas deben manejarse en el código. Su ocurrencia es predecible y una situación normal puede manejarse razonablemente. Como IOException o algunas excepciones personalizadas. A excepción de RuntimeException y sus subclases, todas son excepciones marcadas.

RuntimeException
significa que el compilador no verificará si el programa ha procesado RuntimeException. No es necesario capturar las excepciones de tipo RuntimeException en el programa, ni tampoco es necesario declarar la clase RuntimeException en el cuerpo del método. Cuando ocurre una RuntimeException, significa que se ha producido un error de programación en el programa, por lo que debe averiguar el error y modificar el programa en lugar de detectar la RuntimeException.

Varias excepciones comunes y las razones de esta excepción

1, java.lang.NullpointerException (excepción de puntero nulo)

Razón: esta excepción se encuentra a menudo, la razón de la excepción es que hay un puntero nulo en el programa, es decir, se llama a un objeto no inicializado o inexistente en el programa. A menudo ocurre en el código de creación de objetos y matrices de llamada, como que el objeto no está inicializado o la ruta cuando se crea la imagen es incorrecta.

2. java.lang.ClassNotFoundException (la clase especificada no existe)

Motivo: cuando se intenta convertir datos de tipo String en un tipo numérico especificado, pero la cadena no cumple con los requisitos de los datos numéricos, se produce esta excepción. Por ejemplo, al convertir datos de tipo String "123456" en datos de tipo numérico, se pueden convertir. Pero si los datos de tipo String contienen caracteres no numéricos, como 123 * 56, se producirá una excepción cuando se conviertan a tipo numérico. El sistema detectará esta excepción y la solucionará

3. java.lang.ClassNotFoundExceptio (la clase especificada no existe)

Razón: debido a que el nombre y la ruta de la clase son incorrectos, generalmente cuando el programa intenta cargar una determinada clase a través de una cadena, se puede generar una excepción. Por ejemplo: se produce una excepción al llamar a Class.forName (), o al llamar a ClassLoadfinaSystemClass () o LoadClass ()

4. java.lang.IndexOutOfBoundsException (excepción de fuera de límites de subíndice de matriz)

Razón: Verifique si el valor del subíndice de la matriz o cadena llamada en el programa excede el rango de la matriz. En términos generales, no es fácil cometer este error cuando se muestra la matriz que llama, pero la llamada implícita puede generar un error. En este caso, la longitud de la matriz definida en el programa está determinada por algún método específico, no declarado de antemano. En este momento, puede verificar la longitud de la matriz primero para evitar esta excepción

5. java.lang.IllegalArgumentException (error de parámetro de método)

Por ejemplo, si hay tres valores en el método g.setColor (int red, int green, int blue), esta excepción ocurrirá si hay más de 255. Si esta excepción existe en el programa, verifique el parámetro que pasa en la llamada al método O el valor del parámetro es incorrecto

6, java.lang.IllegalAccessException (sin permiso de acceso)

Esta excepción ocurre cuando el programa quiere llamar a una clase, pero el método actual no tiene acceso a la clase. Esta excepción puede ocurrir si Package se usa en el programa

7, java.lang.ArithmeticException (excepción de operación matemática)

Tal anomalía ocurre cuando hay una operación como dividir por cero en una operación matemática.

8, java.lang.ClassCastException (excepción de conversión de tipo de datos)

Esta excepción ocurre cuando se intenta forzar la conversión de un objeto, pero el objeto no es convertible ni convertible a una instancia de su subclase.

9. java.lang.FileNotFoundException (excepción de archivo no encontrado)

Esta excepción se generará cuando el programa abra un archivo que no existe para lectura o escritura. Esta excepción es lanzada por la declaración del constructor de FileInputStream, FileOutputStream, RandomAccessFile, incluso si el archivo que se está operando existe, pero no es accesible por alguna razón, como abrir un archivo con permiso de solo lectura y escribir datos en él, el método de construcción anterior sigue siendo Lanzará una excepción

10. java.lang.ArrayStoreException (excepción de almacenamiento de matriz)
cuando se intenta almacenar un objeto de un tipo incompatible en una matriz Object [], se lanzará una excepción

11. java.lang.NoSuchMethodException (el método no existe excepción)
Cuando el programa intenta crear un objeto mediante la reflexión, accede (modifica o lee) un método, pero el método no existe, se lanzará una excepción.

12. java.lang.EOFException (excepción de fin de archivo)
cuando el programa encuentra el final del archivo o flujo durante el proceso de entrada, se lanza una excepción. Entonces, esta excepción se usa para verificar si se alcanza el final del archivo o transmisión

13. Se genera java.lang.InstantiationException (excepción de instanciación)
cuando se intenta crear una instancia de una determinada clase mediante el método newInstance () de Class, pero el programa no puede crear el objeto a través del constructor. El objeto Class representa una clase abstracta, interfaz, clase de matriz y tipo básico. La clase representada por esta clase no tiene un constructor correspondiente.

14. java.lang.InterruptedException (excepción abortada) se lanza
cuando un hilo está en un estado de espera prolongado, inactivo u otro estado suspendido, mientras que otros hilos terminan el hilo a través del método de interrupción de Thread.

15. java.lang.CloneNotSupportedException (la excepción de clonación no es compatible)
Cuando la interfaz Cloneable no está implementada o el método de clonación no es compatible, llamar a su método clone () lanzará la excepción

16. Se lanza java.lang.OutOfMemoryException (error de memoria insuficiente) cuando la memoria disponible no es suficiente para que la máquina virtual Java la asigne a un objeto

17. java.lang.NoClassDefFoundException (Error de definición de clase no encontrado)
Este error se genera cuando la máquina virtual Java o el cargador de clases intenta crear una instancia de una clase, pero no se puede encontrar la definición de la clase.

Manejo de excepciones: modelo de captura y lanzamiento

Proceso 1:
"Lanzar":
En la ejecución normal del programa de palabras clave throw throws , una vez que ocurre una excepción, se generará un objeto de clase de excepción correspondiente en el código de excepción, y después de lanzar el objeto, lo siguiente El código ya no se ejecuta.
Proceso dos:
"captura": manejo de excepciones: try-catch-finalmente

lanzar palabra clave

Rol:
se utiliza para lanzar un objeto de excepción especificado. Throw se usa en un método para lanzar un objeto de excepción, pasar el objeto de excepción al llamador y finalizar la ejecución del método actual.
Formato de uso:

throw new 异常类名(参数);
throw new NullPointerException("要访问的arr数组不存在");
throw new ArrayIndexOutOfBoundsException("该索引在数组中不存在,已超出范围");

lanza una declaración de palabras clave para manejar excepciones

Declarar excepción de procesamiento :
use la palabra clave throws para identificar el problema, lo que significa que el método actual no maneja la excepción, sino que le recuerda a la persona que llama que la maneje ... Eventualmente, la máquina virtual terminará el programa directamente e imprimirá la información de la excepción.
Formato de uso:

修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ 
 // 可以抛出一个,也可以多个。
}	

Uso de try-catch-finalmente

Código:

try{
    可能会出现异常的代码
}catch(异常的类型 变量名){
    处理异常的代码
    //记录日志/打印异常信息/继续抛出异常
}finally{
    无论异常是否发生,都会执行这里的代码
    (正常情况,都会执行finally中的代码,一般用来释放资源)
}

Pasos de ejecución:
1. Primero ejecute el código en try. Si hay una excepción en el código en try, luego ejecute el código en catch () directamente. Después de la ejecución, el código en finalmente se ejecutará, y luego el programa continuará ejecutándose

2. Si no hay ninguna excepción en el código en try, entonces el código en catch () no se ejecutará, pero el código en finalmente se ejecutará, y luego el programa continuará ejecutándose.

Nota:
1. finalmente es opcional, no es necesario escribir.
2. Utilice try para envolver el posible código de excepción Durante la ejecución, una vez que ocurra una excepción, se generará un equipo correspondiente al objeto de la clase de excepción.
Según el tipo de excepción de este objeto, vaya a catch para hacer coincidir.
3. Una vez que el objeto de excepción en el intento coincide con una captura, entra en la captura y continúa manejando la excepción.
Una vez que se completa el procesamiento, salta de la estructura actual try-catch (sin escribir finalmente). Continúe ejecutando el siguiente código
4. Si el tipo de excepción en
catch no tiene una relación padre-hijo, no importa quién declare el tipo de excepción en catch. Si se cumple la relación padre-hijo, la clase secundaria debe declararse por encima de la clase padre, de lo contrario Informar de un error.
5. Soluciones de objetos de excepción de uso común: String getMessage () printStackTrace ()
6. Las variables declaradas en la estructura try no se pueden llamar después de que se libera la estructura try.
7. La estructura try-catch-finalmente se puede anidar

Excepción personalizada

¿Qué es una clase de excepción personalizada?

Defina la clase de excepción según la situación anormal de su propio negocio durante el desarrollo.

Personalice una excepción de lógica empresarial: RegisterException . Una clase de excepción registrada.

Cómo definir la clase de excepción:
personalizar una excepción en tiempo de compilación: personalizar la clase y heredar de java.lang.Exception.
Personalice una clase de excepción en tiempo de ejecución: clase personalizada y herede de java.lang.RuntimeException.

Ejercicio de excepción personalizada
Requisito: Simulamos la operación de registro, si el nombre de usuario ya existe, se lanzará una excepción y se le preguntará: querido, el nombre de usuario ha sido registrado.

Primero defina una clase de excepción registrada RegisterException:

// 业务逻辑异常
public class RegisterException extends Exception {
    /**
     * 空参构造
     */
    public RegisterException() {
    }

    /**
     *
     * @param message 表示异常提示
     */
    public RegisterException(String message) {
        super(message);
    }
}

Simule la operación de inicio de sesión, use la matriz para simular los datos almacenados en la base de datos y proporcione un método para juzgar si existe la cuenta registrada actual.

public class Demo {
    // 模拟数据库中已存在账号
    private static String[] names = {"bill","hill","jill"};
   
    public static void main(String[] args) {     
        //调用方法
        try{
              // 可能出现异常的代码
            checkUsername("nill");
            System.out.println("注册成功");//如果没有异常就是注册成功
        }catch(LoginException e){
            //处理异常
            e.printStackTrace();
        }
    }

    //判断当前注册账号是否存在
    //因为是编译期异常,又想调用者去处理 所以声明该异常
    public static boolean checkUsername(String uname) throws LoginException{
        for (String name : names) {
            if(name.equals(uname)){//如果名字在这里面 就抛出登陆异常
                throw new LoginException("亲"+name+"已经被注册了!");
            }
        }
        return true;
    }
}

Supongo que te gusta

Origin blog.csdn.net/LinKin_Sheep/article/details/109329938
Recomendado
Clasificación