Java异常学习笔记

异常类体系

  • 异常是指在程序运行期间发生的非正常情况,例如,角标越界、除0运算等,为了更好的将正常流程代码和这些非正常的处理代码分离,提高阅读性,Java将这些非正常的情况的描述封装成对象,称之为异常类。
  • 每一个类型的非正常情况都会被封装成一个异常类,那么将这些类的共性向上抽取,就形成了异常体系。
  • 最终,形成了一个最终基类—Throwable(当然它也是继承java.lang.Object),该类所有直接或间接子类都具有可抛性,即,问题发生时,可以抛出,让调用者知道并处理。
  • 可抛性通过两个关键字来体现,throws throw ,凡是可以被这两个关键字所操作的类和对象都具备可抛性。
  • Throwable类有2个直接子类Error和Exception
  • Error类:由jvm抛出的严重性的问题,不可处理,需要修改程序。
  • Exception类:就是我们要处理的问题。这个类的子类的后缀名都是用其父类名Exception作为后缀,有很好的阅读性。

自定义异常类

Java已给我们提供了很多异常类,如下图,这只是Exception类的直接子类,

这里写图片描述

但有时,我们也会要自定义异常类,如何操作呢?
非常简单,只要继承异常体系就可以了。这样就具有可抛性,才可以被两个关键字所操作(throws throw);

class MyException extends Exception{
    MyException(){}
    MyException(String msg){
        super(msg);
    }
}

Exception分类

Exception类下有个直接子类RuntimeException,非常重要,它的存在,决定了Exception被分为两大类:
1. 编译时异常
不是继承RuntimeException类的异常类;
编译时就抛异常,提醒开发者做针对性处理。
2. 运行时异常
继承RuntimeException类的异常类
编译时不不检测异常,而是在程序运行时,让程序强制停止,让调用者对代码进行修正。

所以自定义异常时,要么继承Exception。要么继承RuntimeException。

throws 和throw的区别

  1. throws使用在函数上,throw使用在函数内。
  2. throws抛出的是异常类,可以抛出多个,用逗号隔开。throw抛出的是异常对象。
//
public int getArrayByIndex(int[] arr,int index){
    if(index>=arr.length){
        throw new ArrayIndexOutOfBoundsException("数组的角标越界:"+index);
    }
    return arr[index];
}

异常处理

异常处理的原则:
1. 方法中如果抛出需要检测的异常,那么要么在方法上声明,要么函数内用trycatch捕捉,否则编译失败。
2. 如果调用到了声明异常的方法,要么trycatch要么throws,否则编译失败。
3. 功能内容可以解决,用catch,解决不了,用throws告诉调用者,由调用者解决 。
4. 一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性的处理。

这里写图片描述

try-catch格式

try{
    //需要被检测异常的代码。
}
catch(异常类 变量)//该变量用于接收发生的异常对象{
    //处理异常的代码。
}
finally{
    //一定会被执行的代码。
}

异常的注意事项

  1. 子类在覆盖父类方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类。
  2. 如果父类抛出多个异常,那么子类只能抛出父类异常的子集。
  3. 如果父类的方法没有抛出异常,那么子类覆盖时绝对不能抛,就只能try 。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值