最新的Yusi主题上线啦!

异常的继承关系

java lzxianren 859℃ 0评论

异常的继承

Throwable类时是所有异常和错误的超类,它有两个子类Error和Exeption,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。

Error与Exception

异常的捕获与处理

异常的处理步骤

使用try-catch-finally时需要注意的问题:

  1. try、catch、finally三个语句块均不能单独使用,三者可以组成try…catch..finally、try…catch、try…finally三种结构,catch语句可以有一个或多个,finally语句最多一个;
  2. try、catch、finally三个代码块中变量的作用域为代码块内部,分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
  3. 多个catch块时候,最多只会匹配其中一个异常类且只会执行该catch块代码,而不会再执行其它的catch块,且匹配catch语句的顺序为从上到下,也可能所有的catch都没执行(先Catch子类异常再Catch父类异常)。

finally的作用:
1. 无论try所指定的代码块是否抛出异常,也无论catch语句的异常类型是否与所抛出的异常类型一致,finally中的代码一定会得到执行;
2. 通常在finally语句中可以进行资源的清除工作,如关闭打开的文件、删除临时文件等。

throw与throws关键字

例子:

注:
1. throws A(表示调用f方法时可能抛出A异常)
谁调用f方法,谁处理异常A,f方法本身不处理A异常
2. try{…}catch(){…}
f方法本身自己来处理A异常
3. 要抛出的异常必须是Throwable的子类

问题补充

  1. try-cathch-finally-return的执行顺序
    (1) try块中没有抛出异常,try、catch和finally块中都有return语句
    先执行try块,执行到return语句时,先执行return的语句,但是不返回到main方法,再执行finally块,遇到finally块中的return语句,执行finally块中的return语句,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值。
    结论:try-catch-finally都有return语句时,没有异常时,返回值是finally中的return返回的。

    (2) try块中没有抛出异常,仅try和catch中有return语句
    try中执行完return的语句后,不返回,执行finally块,finally块执行结束后,返回到try块中最后的值。
    结论:try-catch都有return语句时,没有异常时,返回值是try中的return返回的。

    (3) try块中抛出异常,try、catch和finally中都有return语句
    抛出异常后,执行catch块,在catch块的return执行完后,并不直接返回而是执行finally,因finally中有return语句,所以,执行,返回finally中有return的结果。
    结论:
    try块中抛出异常,try、catch和finally中都有return语句,返回值是finally中的return。
    (4) try块中抛出异常,try和catch中都有return语句
    抛出异常后,执行catch块,执行完finally语句后,依旧返回catch中的执行return语句后的值,而不是finally中修改的值。
    结论:
    try-catch都有return语句时,有异常时,返回值是catch中return值。
    (5) try、catch中都出现异常,在try-catch-finally中都有有return语句
    try块中出现异常到catch,catch中出现异常到finally,finally中执行到return语句返回,不检查异常。
    结论:
    try块和catch块中都抛出异常,try、catch和finally中都有return语句,返回值是finally中的return。

转载请注明:程序员的自我修养 » 异常的继承关系

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址