【JavaSE---09】异常

1. 异常

  1. 作用:使得程序更加健壮。比如当程序遇到很小错误时,不至于让整个程序停止。
  2. 分类:
    1. Error:指程序遇到严重错误,程序无法继续运行下去。比如:StackOverFlowError栈溢出、Out of memory Error内存不足等。
    2. Exception:指程序遇到一般性错误,可以通过异常机制解决该错误,使得程序能够继续进行下去。比如:读取不存在的文件等
      1. 编译时异常:必须处理
      2. 运行时异常:可以不处理
        1. NullPointerException:空指针异常。指某引用类型变量未赋值(默认指向null)就使用。
        2. ArithmeticException:算术异常。如:除以0
        3. ArrayIndexOutOfBoundsException:数组下标越界异常。
        4. ClassCastException:类的转型异常。
        5. NumberFormatException:字符串转为基本数据类型异常。
  3. 异常体系图(重要!!!)
    在这里插入图片描述
  4. 练习:
    在这里插入图片描述

2. 异常处理(2种处理方式)

一定出现 或 可能出现异常的地方进行处理。有两种方式:

  1. try-catch-finally:直接处理异常
  2. throws抛出异常:不管,抛出去,间接处理异常,实际的异常交给调用者处理。最终,要么被try-catch-finally处理,要么被jvm处理。

2.1 try-catch-finally

  1. try-catch-finally:程序员在代码中捕获异常,并直接处理异常
    在这里插入图片描述
  2. 细节:
    1. try中某行发生异常,则try中后续的语句不会再执行。
      在这里插入图片描述
    2. 可以没有catch:那么相当于没有捕获异常,那么程序出现异常后,在执行finally后就退出程序。
      在这里插入图片描述
    3. 可以没有finally
    4. try中有多个异常,则可以使用多个catch捕获多个异常。但是:捕获子类异常写在前,捕获父类异常在后。且前面捕获了异常,则后面不会再进行捕获
      当然也可以只使用最高父类Exception直接捕获所有异常。
      在这里插入图片描述
      在这里插入图片描述
    5. 关于try-catch-finally中的return:首先执行完try-catch-finally逻辑,途中遇到return只是执行,并将待返回的结果用temp变量保存起来,而不返回;最后再判断返回哪个return对应的temp值。判断条件如下:
      1. finally中有return,则必返回finally中return对应的temp
        在这里插入图片描述
      2. finally中没有return,且无异常发生,则返回try中return对应的temp
        在这里插入图片描述
      3. finally中没有return,且发生异常,则返回对应catch中return对应的temp值
        在这里插入图片描述
  3. 练习:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.2 throws抛出异常

2.2.1 throws

throws抛出异常:不管,抛出去,间接处理异常,实际的异常交给调用者处理。最终,要么被try-catch-finally处理,要么被jvm处理。
在这里插入图片描述

2.2.2 throw

  1. throw是程序员主动制造一个异常。异常的处理如下:
    ① 如果用throw主动抛出一个异常,则所在方法采用throws抛异常,
    ② 然后由方法的调用者使用try-catch-finally捕获异常。
     或者方法的调用者所在方法再使用throws抛异常,一直下去,直到某一个方法的调用者使用try-catch-finally捕获异常。

    在这里插入图片描述
  2. throw在方法中使用,语法:throw new 异常类名("异常信息")
  3. try-catch-finally中处理throw的顺序和处理return的顺序一样。
    在这里插入图片描述

2.2.3 throws vs throw

在这里插入图片描述

2.3 细节

细节:

  1. 每一可能异常处:要么使用try-catch-finally处理异常,要么向上throws异常。
  2. 对于编译异常必须处理。【哪些属于编译异常,可以看上面的异常体系图】
    在这里插入图片描述
  3. 对于运行时异常的方法,如果既不使用try-catch-finally,也不使用throws。则默认使用throws,所以什么也不做,最终是使用throws机制到最顶级的jvm退出的程序。
  4. 子类重写父类抛异常的方法时,所抛的异常与其相同或者为其子类型异常。
    在这里插入图片描述

2.4 练习

在这里插入图片描述

3. 自定义异常

  1. 自定义类继承Exception类属于编译异常,继承RuntimeException属于运行时异常。【我们自定义异常类一般继承RuntimeException,因为运行时异常具有默认的throws机制,不用自己写】
  2. 例子:
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElegantCodingWH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值