Java异常机制

Java异常机制

Java的异常:

  • Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。
  • 在Java API中已经定义了许多异常类,通常分为两类:异常Exception和 错误Error

接下来通过一张图来展示Throwable类的继承体系,如下图所示。

image-20210315232040565

通过图中可以看出,Throwable有两个直接子类Error和Exception,其中Error代表程序中产生的错误,Exception代表程序中产生的异常。

  • Error:Error类称为错误类,它表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的。
  • Exception类称为异常类,它表示程序本身可以处理的错误,在开发Java程序中进行的异常处理,都是针对Exception类及其子类。在Exception分支中有一个重要的子类RuntimeException(运行时异常)。
    • ArrayIndexOutOfBoundsException (数组下标越界)
    • NullPointerException (空指针异常)
    • ArithmeticException (算术异常)
    • MissingResourceException (丢失资源)
    • ClassNotFoundException (找不到类)异常,这些异常都是不检查异常,程序中可以选择捕获,也可以不处理。

Error与Exception的区别:

​ Error通常是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;而Exception通常情况下时可以被程序处理的,并且在程序中应该尽可能去处理这些异常。

异常处理机制:

Java中提供了一种对异常进行处理的方式——异常捕获。

异常处理五个关键字:try、catch、finally、throw、throws

Java中允许在方法的后面使用throws关键字对外声明该方法有可能发生的异常(自动抛出异常),这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。

注意:throw一般用在于方法里面,而throws一般直接用在方法定义的后面。

Throwable类中的常用方法:

image-20210316162610595

 public static void main(String[] args) {
        int a = 1;
        int b = 0;
        //捕获多个异常:需要按Throwable类的继承,从小到大向下定义
        try { //try监控区域
            System.out.println("正常输出:" + a / b);
        }catch (ArithmeticException e) {    //捕获监控区域里面代码的异常情况 catch(想要捕获的异常类型)
            e.getMessage();
            System.out.println("输出异常");
        }finally {  //处理捕获后的工作,无论出不出异常,finally都会执行
            System.out.println("异常捕获结束");
        }//finally一般可以不需要加上去

    }

自定义异常:

  • 在Java中允许用户自定义异常,但自定义的异常类必须继承自Exception或其子类。
  • 在实际开发中,如果没有特殊的要求,自定义的异常类只需继承Exception类,在构造方法中使用super()语句调用Exception的构造方法即可。
  • 可通过throw关键字用于在方法中声明抛出异常的实例对象。
public class Zexcept2 extends  Exception{		//自定义一个异常抛出
    private int id;
    public  Zexcept2(int e) {
        this.id = e;
    }
    //toString异常打印信息
    public String toString() {
        return "错误信息:{ id =" + id + "}";
    }

}
public class Zexcept1 {						//调用自定义的异常
    public static void main(String[] args) {
        try{
            test(11);						//抛出异常-->错误信息:{ id =" + id + "}
        }catch (Zexcept2 e) {
            System.out.println("Exception" + e);		
        }
    }
    static void test(int e) throws Zexcept2{
        System.out.println("输出" + e);
        if (e > 10) {
            throw new Zexcept2(e);  //抛出异常
        }
        System.out.println("TRUE");
    }
}

posted @ 2021-03-21 15:06  VXZX  阅读(124)  评论(0)    收藏  举报