[Notas de Java] Manejo de excepciones

  El esquema de procesamiento predeterminado de la máquina virtual Java finalizará el programa cuando ocurra una excepción en el programa, y ​​una excepción en una cierta parte del proyecto real no debería afectar la ejecución del programa posterior, por lo que debe manejar la excepción usted mismo.

1. Clase de excepción de Java

1. La diferencia entre la excepción en tiempo de compilación y la excepción en tiempo de ejecución

Inserte la descripción de la imagen aquí

2. Métodos de miembros desechables

  Método de miembro de la clase de ancestro anormal Throwable
Inserte la descripción de la imagen aquí

public class ThrowableTest {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("开始");
        method();
        System.out.println("结束");
    }

    private static void method() {
    
    
        try {
    
    
            int a[]={
    
    1,2};
            System.out.println(a[3]);
        }catch (ArrayIndexOutOfBoundsException e){
    
    
//            System.out.println(e.getMessage());//3
//            System.out.println(e.toString());//java.lang.ArrayIndexOutOfBoundsException: 3
            e.printStackTrace();
            /*
                java.lang.ArrayIndexOutOfBoundsException: 3
                at _3Exception.ThrowableTest.method(ThrowableTest.java:25)
                at _3Exception.ThrowableTest.main(ThrowableTest.java:18)
            */
        }
    }
}

2. Manejo de excepciones

  Si hay un problema con el programa, debemos solucionarlo nosotros mismos. Hay dos soluciones:

  • trata de atraparlo
  • lanza

1. Prueba ... captura de manejo de excepciones

formato:

try{
    
    
	可能出现异常的代码;
}catch(异常类名 变量名){
    
    
	异常处理代码;
}finally{
    
    
	必须执行的代码;
}

Inserte la descripción de la imagen aquí

public class ExceptionTest1 {
    
    
    public static void main(String[] args) {
    
    

        try {
    
    
            int a[]={
    
    1,2};
            System.out.println(a[2]);
        }catch (ArrayIndexOutOfBoundsException e){
    
    
            System.out.println("越界");
            e.printStackTrace();
        }
        System.out.println("结束");
    }
}

Inserte la descripción de la imagen aquí


2. Tiros de manejo de excepciones

  Aunque podemos manejar excepciones a través de try ... catch ..., no tenemos la autoridad para manejar excepciones en todos los casos. Es decir, a veces no podemos manejar las excepciones que pueden ocurrir. ¿Qué debemos hacer? ¿en este momento?
  En respuesta a esta situación, java proporciona soluciones throws

public class ThrowsTest {
    
    
    public static void main(String[] args) {
    
    
        System.out.println("开始");
        
        method1();//运行时异常如果需要程序继续执行还需要try catch
        
        try {
    
    
            method2();
        } catch (ParseException e) {
    
    
            e.printStackTrace();
        }
        System.out.println("结束");
    }

    //运行时异常
    public static void method1() throws ArrayIndexOutOfBoundsException{
    
    
        int a[] = {
    
    1, 2};
        System.out.println(a[2]);
    }

    //编译时异常
    public static void method2() throws ParseException {
    
    
        String s="2048-08-01";
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date d=sdf.parse(s);//此处有编译异常
        System.out.println(d);
    }
}
  • Tenga en cuenta que
    Inserte la descripción de la imagen aquí
    no existe un procesamiento sustantivo para lanzar excepciones. El procesamiento real aún está por intentar capturar el procesamiento.

Tres. Excepción personalizada

1. Pasos

  1. Personalice una clase de excepción personalizada, debe heredar la clase de excepción
  2. Use throws para declarar la excepción en el encabezado del método donde puede ocurrir una excepción
  3. Use throw para lanzar el objeto de excepción personalizado donde ocurre una excepción en el cuerpo del método

2. Uso de lanzamientos y lanzamientos

  Java proporciona una solución de procesamiento de lanzamientos. En qué función aparece la instrucción que puede causar una excepción, la excepción debe declararse mediante throws en el encabezado de la función, y la excepción se lanzará mediante throw en el caso de un problema.
formato:

返回值类型 方法名称 throws 异常类名{
    
    
	if(发生异常)
		throw 异常类对象;
}

3. La diferencia entre lanzamientos y lanzamientos

Inserte la descripción de la imagen aquí

4. Caso

  • Clase de excepción personalizada
    Llame al constructor de la clase principal Exception a través de super
//异常类,固定格式
public class ScoreException extends Exception {
    
    //继承Exception类,编译异常
    ScoreException(){
    
    }

    ScoreException(String message){
    
    
        super(message);//传给祖先类
    }
}
  • Posibles anomalías
//会产生异常的地方
public class Teacher {
    
    
    public static void checkScore(int score) throws ScoreException {
    
    
        if (score <0 ||score>100){
    
    
            throw new ScoreException(score+":成绩不符合规范");//抛出异常对象
        }else {
    
    
            System.out.println("成绩符合规范");
        }
    }
}
  • prueba
//测试
public class TeacherTest {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        System.out.println("输入分数:");
        int s=in.nextInt();

        Teacher t = new Teacher();
        try {
    
    
            t.checkScore(s);//编译异常,需要用try catch抓起来
        } catch (ScoreException e) {
    
    
            e.printStackTrace();
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/Supreme7/article/details/107069740
Recomendado
Clasificación