异常

一、异常的处理:抓抛模型

过程一:“抛”:程序在正常执行的过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象。并将此对象抛出。
一旦抛出对象以后,其后的代码就不再执行。
过程二:“抓”:可以理解为异常的处理方式:①try-catch-finally ②throws

二、try-catch-finally的使用

    try{
        //可能出现异常的代码
    }catch(异常类型1 变量名1){
        //处理异常的方式1
    }
    catch(异常类型2 变量名2){
        //处理异常的方式2
    }
    catch(异常类型3 变量名3){
        //处理异常的方式3
    }
    ...
    finally{
        //一定会执行的代码
    }

说明:

  1. finally是可选的
  2. 使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中匹配
  3. 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构(在没写finally的情况下)。继续执行其后的代码
  4. catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓
    catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错。
  5. 常用的异常对象处理的方式:①String getMessage() ②printStackTrace()
  6. 在try结构中声明的对象,在try结构外不能在调用
  7. try-catch结构可以相互嵌套

体会1:使用try-catch-finally处理编译时异常,使得程序在编译时就不再报错,但是运行时仍可能报错。
相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。
体会2:开发中,由于运行时异常比较常见,所以我们通常就不针对运行时异常编写try-catch-finally。
针对编译时异常,我们说一定要考虑异常的处理。

————————————

三、try-catch-finally中finally的使用:

  1. finally是可选的
  2. finally中声明的是一定会被执行的代码。即使catch中又出现了异常,try中有return语句,catch中有return语句等情况。
  3. 像数据库连接、输入输出流、网络编程Socket等资源,JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。

异常处理的方式二:throws + 异常类型

  1. "throws + 异常类型"写在方法的声明处。指明此方法执行时,可能会抛出的异常类型。
    一旦当方法体执行时,出现异常,仍会在异常代码处生成一个异常类的对象,此对象满足throws后异常类型时,就会被抛出。异常代码后续的代码就不再执行!
  2. 体会:try-catch-finally:正正的将异常处理掉了
    throws的方式只是将异常抛给了方法的调用者。并没有真正将异常给处理掉

方法重写的规则之一:

子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型

posted @ 2022-04-19 23:30  日之出  阅读(209)  评论(0)    收藏  举报