今日学习目标:

  • 异常的概述
  • 异常的分类
  • 异常的处理方式
  • 自定义异常
  • 日志框架
  • 阶段性项目

    1 异常

    1.1 什么是异常?

  • 异常就是报错,程序在执行过程中,数据导致程序不正常,导致了JVM非正常停止

  • 之前的空指针异常,类型转换异常还有索引越界都属于异常的一种
  • 程序产生异常时,在异常初创建了一个该异常的对象,该对象携带了相关的异常信息,

    1.2 异常的分类

  • 编译时期异常

    • 非RuntimeException及其子类:就是编译时期出现的异常,编译时期必须处理,不然无法执行
  • 运行时期异常

    • RuntimeException及其子类 :就是在运行时可能出现的异常, 在编译时期不需要处理

      2 异常的处理方式

      2.1 JVM处理异常的方式

  • 把异常的类型 , 原因 , 位置打印在控制台

  • 程序停止执行
  • 缺点:无法看到后面的代码

    2.2 手动处理异常方式

  • 声明异常—— throws

    1. - 修饰符 返回值类型 方法名(参数列表) throws 异常类型1 , 异常的类型2... { ... }
    • 作用 :
      • 调用此方法表示这里可能会出现这种异常,提醒效果
      • 如果没有出现异常也不影响程序执行
      • 如果出现了异常,会把异常交给本方法的调用者处理(甩锅)
  • 抛出异常—— throw

    1. - 修饰符 返回值类型 方法名(参数列表) { throw new 异常对象();}
    2. - 抛出异常的格式必须在方法的内部完成
    3. - 抛出异常可以中断方法,抛出异常下面代码无法执行
    • 作用:
      • 在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理,表示让该方法结束运行。
      • 告诉调用者方法中出现的问题原因

        2.3 throws和throw的区别

  • throws:

    • 在方法声明后面方法体大括号前面,跟的是异常类名
    • 表示声明异常,告知调用者调用该方法有可能会出现这样的异常
  • throw:

    • 用在方法体内,跟的是异常对象名
    • 表示手动抛出异常对象,告知调用者数据传入有误

      2.4 捕获异常

  • 捕获处理异常介绍 : try, catch;

    • 捕获处理是本方法内部进行处理,能够阻止异常的传递,从而保证程序能够往下执行.
  • 捕获异常的格式

    1. try {
    2. try中存放可能会出现问题的代码
    3. 1.代码...
    4. 2.代码...
    5. 3.代码...
    6. } catch (异常类型 变量名) {
    7. 4.处理异常方案
    8. 打印异常,获取异常原因记录日志......)
    9. }
  • 执行方式

    • 如果 try 中没有遇到问题,catch中的不执行
    • 如果 try 中代码2遇到了问题,下面的代码不会执行,会拿当前异常对象和异常类型匹配,匹配成功执行处理异常代码
    • 如果出现的问题没有被捕获,虚拟机处理
  • 多异常捕获处理方案
    • 多个异常,每个异常单独处理 ```java try{ 异常1 }catch(异常1){

} try{ 异常2 }catch(异常2){

}

  1. - 多个异常,一次捕获,多次处理
  2. ```java
  3. try{
  4. 异常1
  5. 异常2
  6. }catch(异常1){
  7. }catch(异常2){
  8. }
  • 多个异常,异常一次捕获,一次处理
    1. try{
    2. 异常1
    3. 异常2
    4. }catch(Exception e){
    5. }

    2.5 Throwable 的成员方法

    | 方法名 | 说明 | | —- | —- | | public String getMessage() | 返回此 throwable 的详细消息字符串 | | public String toString() | 返回此可抛出的简短描述 | | public void printStackTrace() | 把异常的错误信息输出在控制台 |

3 自定义异常

3.1 概述

当JDK中的异常类型,不满足实际的业务需要时。就可以自己定义异常。例如,学生的年龄数据,如果是负数或者数据 超过了150认为是不合法的,就需要抛出异常。JDK中就没有表示年龄的异常,就需要自己定义异常了

3.2 实现步骤

  • 定义异常类
  • 写继承关系
  • 空参构造
  • 带参构造
    • 注意:
  • 需要定义编译时异常就继承Exception
  • 需要定义运行时异常就继承RunTimeException

    4. 当日问题小结

    4.1 当日遇到的问题

4.2 出现问题原因

4.3 解决问题方案