异常处理

Error和Exception

异常指程序中出现的不期而至的状况,影响了正常的程序执行流程

三种异常:

  1. 检查性异常
  2. 运行时异常
  3. 错误

“一尘在心”的博客深入理解Java中异常体系进行了详细介绍

Error

Error类对象由Java虚拟机生成抛出,这些异常发生时,Java虚拟机一般会选择线程终止

Exception

这些异常通常是由程序逻辑错误引起,应尽可能避免这类情况发生

RuntimeException(运行时异常)

  • ArrayIndexOutOfBoundsException(数组下标越界)
  • NullPointerException(空指针异常)
  • ArithmeticException(算数异常)
  • MissingResourceException(丢失异常)
  • ClaasNotFoundException(找不到类异常)

Error和Exception区别:Error是程序无法控制和处理的,Java虚拟机会终止线程;Exception是Java虚拟机可以被处理的

捕获和抛出异常

关键字:try、catch、finally、throw、throws

package com.exception;

public class Demo1 {
    public static void main(String[] args) {
        int a = 1;
        int b = 0;

        //注意:若要捕获多个异常,需要范围从小到大
        try { //监控区域
            System.out.println(a/b);
        } catch (Exception e) { //catch(想要捕获的异常类型)
            //异常发生后执行的内容
            System.out.println("Exception");
            e.printStackTrace();
        } catch (Throwable e) { //可进行多异常捕获
            System.out.println("Throwable");
        }
        finally { //无论有没有异常都会执行的内容
            System.out.println("finally");
        }
    }
    
}
package com.exception;

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

    }

    //主动抛出异常,一般用在方法中
    //方法上抛出异常用throws,方法里面抛出异常用throw
    public void test (int a, int b) throws ArithmeticException{
        if (b == 0) {
            throw new ArithmeticException(); 
        }
    }

}

自定义异常

用户自定义异常类,需继承Exception

MyException.java

package com.exception.demo2;

//自定义异常
public class MyException extends Exception {
    private int detail;

    public MyException (int a) {
        this.detail = a;
    }

    //重写父类中的方法,打印异常信息

    @Override
    public String toString() {
        return "MyException{" + "detail=" + detail + '}';
    }
}

Test.java

package com.exception.demo2;

public class Test {
    public static void main(String[] args) {
        try {
            new Test().test(20);
        } catch (MyException e) {
            System.out.println("MyException->" + e);
        }
    }

    public void test (int a) throws MyException {
        System.out.println("传递参数为:" + a);
        if (a > 10) {
            throw new MyException(a); //抛出异常
        }
        System.out.println("正常");
    }
}

总结

  1. 处理运行时异常时,应用逻辑规避同时辅助try-catch处理
  2. 在多重catch时,可在后面加catch(Exception)
  3. 对于不确定的代码块,可加上try-catch处理潜在异常
  4. 尽可能处理异常,而不是使用printStackTrace()方法打印输出
  5. 使用finally语句释放资源,如IO流
posted @ 2021-02-16 14:04  sgKurisu  阅读(77)  评论(0)    收藏  举报