2022-07-29 第一组学习笔记

1.异常

遇到异常的时候会终止,当程序抛出一个异常时,抛异常后面的语句不再执行,类似于return的功能。

重写的方法不能抛出比被重写方法更大的异常类型

目前已学习异常:

1.下标越界 数组下标越界,字符串下标越界

2.空指针

3.类型转换异常

4.数字格式化

5.算术异常(数学异常)

编程界:

除数为0

IO流(输入输出流)

没有关闭停电

1.1异常的体系结构

  • 最顶级的异常Throwable 包括(直接子类):错误(Error) 异常(Exception)

    •  Error——正常情况下不太可能出现的,绝大多数Error都会导致程序处于非正常的状态下,很难恢复。在外力的作用下,不考虑。(它是在Java程序处理范围之外的
    • Exception——Java语言中,将程序执行中不正常的情况称之为异常
      • 编译期异常:写代码时,抛异常。如果编译器不解决,会编译不通过,一直报红
      • 运行期异常:RuntimeException,运行时会抛出异常,平时没事。
  • 自定义异常:

    • Java中异常的机制比较完善,但是结合实际业务。

      1. 所有的异常必须是Throwable的子类(大材小用,没必要)

      2. 继承异常

        • 自定义编译期异常:继承Exception

        • 自定义运行期异常:继承RuntimeException

  • 自定义异常类的规则:

    • 错误码,异常现象,无参构造器,有参构造器,getter方法,setter方法

    •         //错误码---通常是我们自己定义的规则
              private Integer code;
              //异常信息
              private String message;
      
              public ServiceException() {
              }
      
              public ServiceException(Integer code, String message) {
                  this.code = code;
                  this.message = message;
              }
      
              public Integer getCode() {
                  return code;
              }
      
              public void setCode(Integer code) {
                  this.code = code;
              }
      
              @Override
              public String getMessage() {
                  return message;
              }
      
              public void setMessage(String message) {
                  this.message = message;
              }
      
      //使用情况
      
              throw new ServiceException(101,"账户不能为空");
      
  • 开发中,大部分情况下使用的都是运行期异常

1.2抛出异常方法

在一个语句块中,如果使用throw抛出一个编译期异常的话,就必须在方法的声明处使用throws关键字来标记异常类型

  • throw语句可以当做方法的返回值的。

    • 在方法中,如果有条件分支,一定要保证每种情况下都有返回值,哪怕是抛异常。

    • // throw  new   异常类构造器(参数);
      
  • throws 声明异常

    • 在 方法声明处(方法名)后使用 throws 异常类
    • throws并不是真正的解决了异常,只是把异常给抛给了下一级调用者。
    • 一个方法是可以抛多个异常,用逗号隔开
  • try{......}catch{....}——处理异常

    •         Integer d=0;
              Integer a=111;
              try {
                  //把有可能抛异常的代码放到try语句块里
                  //try里面的语句遇到异常会跳到catch语句里
                  System.out.println(a/d);
              }catch (ArithmeticException e){
      
                  System.out.println("除数不能为0");
                  //打印异常信息
                  e.printStackTrace();
              }
      
    • try catch的catch中应该写指定的异常(例如如果可能出现空指针异常,就不能写最大的异常)

    • catch可以重复的写,但是(把小的异常写上面,大的异常写下面

为什么要抛异常?

  • 因为要配合全局异常处理机制来解决问题。

看异常从后往前看

1.3异常链

  • 一个异常被抛出之后会继续被调用这个方法的方法捕获或抛出,异常会扩散。
  • 如果一个方法没有捕获编译期异常,该方法必须使用throws来声明

1.4finally关键字

finally用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码一定会执行,

  • 如果try{...}catch{...}里面的异常没有全部捕获,程序还是会终止,但这个时候finally代码块里的代码一定会执行。

  •         try {
                new Ch02().show();
            } catch (MyException e) {
                e.printStackTrace();
            }finally {
                
            }
    
  • 大部分情况下使用try...catch...finally

    • 在finally前面有System.exit(-1)不走finally{}
  • 执行顺序:try——>(catch)——>finally——>return(在finally走finally的return,finally没有走try里的return)

1.5面试题

面试题:throws和throw的区别

throws出现在方法的声明处,可以抛出多个异常(用逗号隔开)

finally关键字:

finally用来创建在try代码块后面执行的代码块

无论是否发生异常,finally代码块中的代码一定会执行。一班finally中的代码都是用来释放资源的。

Finally无论是否出现异常,都会执行

面试题01:try ... catch、finally执行顺序

finally永远是在最后执行的

如果在try ... catch语句中有return,

 

catch可以写多个异常(可以捕获多个异常)

顺序问题:先写小的,再写大的

 

重写的另一个规则:重写的方法不能抛出比被重写方法更大的异常类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值