异常

百知教育学习-胡鑫喆-异常

  • 异常的父类 : Throwable类,位于java.lang包下

    • Throwable类中提供常用的方法

      • public String getMessage() :返回String类型的异常信息
      • public void printStackTrace() :打印跟踪方法调用栈而获得的详细异常信息
    • 异常

      • Throwable 异常的父类

        |- Error 错误 严重 不可避免 不可处理

        |- Exception 异常 可以处理

        ​ |- RuntimeException子类 未检查异常 可以避免 可处理可不处理

        ​ |- 非RuntimeException子类 已检查异常 不可避免 必须处理

  • 异常的产生

    • throw 异常对象 抛出一个异常

    • 异常

      ma调mb,mb调mc,mc抛出异常

    • 异常

    • 异常的传递

      • 沿着方法调用链,反向传递

      • 异常

      • 异常

        在本例中,异常只是一直抛给父类,并没有解决异常

  • 处理异常

    • 1.声明抛出 throws

    • 2.捕获异常 try-catch 多个catch 先catch子类异常,再catch父类异常,否则会报错

      printStackTrace() :打印异常栈追踪信息

      异常

    异常


Finally

  • 为了防止出现异常而中断try块里面的代码,导致里面的代码执行不完全

    • 异常
  • try-catch-finally finally:无论如何都会执行,通常用于释放资源

    • 比如 try{

      ​ 插卡

      ​ 输入密码和金额2000

      ​ 余额-=2000

      ​ 吐钱2000

      ​ }carch(吐钱异常 e){

      ​ 余额+=2000 处理异常

      ​ }finally{

      ​ 退卡

      ​ }

  • finally与return 如果return语句也在finally语句中,那么只会执行finally中的return语句,因为函数只能有一个返回值

    • 异常
  • finally中有给变量值赋值的情况

    • 如果在执行finally块前出现return语句,会把在值先缓存起来,等执行完finally块后,再返回缓存起来的值。
      • 异常
    • try和finally中都有return返回值的情况,其实finally中还是给变量重新赋值了
      • 异常

方法覆盖对抛出异常的要求

  • 子类方法不能抛出一个父类方法没有抛出的异常

    子类方法抛出异常必须是父类方法抛出异常的 同类,子类或不抛

    这是为了保证多态的应用,如果子类抛出父类没有抛出的异常,那么 Super s=new Sub();创建一个父类引用子类对象

    如果出现子类的异常会抛出,没有任何的防范措施。