• 异常和try、catch、finally的简记


    一、异常的简记

      1)Java异常和错误的基类是Throwable(java.lang.Throwable),包括Exception(异常)和Error(错误)。
      2)try和catch不一定需要共存,try是尝试对其中代码捕获异常,catch是捕获异常并且可以处理异常。假如try中有异常抛出,则会去执行catch块,再去执行finally块;假如没有catch块,可以直接执行finally块,方法就以抛出异常的方式结束,而finally 后的内容也不会被执行,所以catch 和 finally 不能同时省略(分别可以单独存在)。
      3)throws和throw
        a)throws:写在方法声明之后,表示方法可能抛出异常,调用者需要处理这个异常。
        b)throw:写在方法体中,表示方法一定会抛出一个异常,要么try...catch处理,要么throws抛出。

    二、关于try、catch、finally的补充

      关于try-catch里面有return的情况:当程序执行到try{}语句中的return方法时,它会将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序,只要finally那里没有return返回值操作,他都不会去更新临时栈中的那个要返回的值,只是覆盖变量的值而已。执行完之后,就会通知主程序“finally的程序执行完毕,可以请求返回了”,这时,就会将临时栈中的值取出来返回。
      结论:任何执行try或者catch中的return语句之前,如果finally存在的话,都会先执行finally语句。如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,编译器把finally中的return实现为一个warning。

      try-catch-finally的情况分析:
        1)情况1:try{} catch(){}finally{} return;
          按顺序执行-end
        2)情况2:try{ return; }catch(){} finally{} return;
          程序执行try块中return之前的代码(包括return语句中的表达式运算)-->再执行finally块,最后执行try中return-->finally块之后的语句return,因为程序在try中已经return所以不再执行。
        3)情况3:try{ } catch(){return;} finally{} return;
          程序先执行try,如果遇到异常执行catch块-->有异常:则执行catch中return之前的代码(包括return语句中的表达式运算)-->再执行finally语句中全部代码--》最后执行catch块中return-->finally之后的代码不再执行-->无异常:执行完try再finally再return.
        4)情况4:try{ return; }catch(){} finally{return;}
          程序执行try块中return之前的代码(包括return语句中的表达式运算)-->再执行finally块,因为finally块中有return所以提前退出。
        5)情况5:try{} catch(){return;}finally{return;}
          程序执行catch块中return之前的代码(包括return语句中的表达式运算)-->再执行finally块,因为finally块中有return所以提前退出。
        6)try{ return;}catch(){return;} finally{return;}
          程序执行try块中return之前的代(包括return语句中的表达式运算)-->有异常:执行catch块中return之前的代(包括return语句中的表达式运算)-->则再执行finally块,因为finally块中有return所以提前退出-->无异常:则再执行finally块,因为finally块中有return所以提前退出。

    PS:多重catch块的顺序问题:由于异常处理系统就近寻找匹配异常处理程序,应先子类后父类。

    三、关于异常的继承类

    Throwable是异常的根类,其分支为两类:Exception 和 Error;其中Exception又分支出两类:otherExceptin 和 runtimeException。

    这里说一下runtimeException:运行时异常,特点是:java编译器不会检查它,出现此类异常时,编译器都会通过的。常见的运行时异常有:NullpointException(空指针异常)、IndexOutOfBoundsException(下标越界异常)、ArithmeticException(数学运算异常)。

  • 相关阅读:
    【转载】最常见的数据类型映射列表
    【自然框架 NatureFramework】 项目结构、命名空间和命名规范
    【自然框架之SSO】实现SSO的一个初步想法
    两张图说明三层的奥义!
    Android中文API(146) —— Display
    [视频监控][海康威视]二次开发 网友文章转载贴
    Android中文API(141) —— GridLayout
    Android支持横行滚动的ListView控件
    Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源
    [WinForm]DataGridView通过代码新增行问题
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12008534.html
Copyright © 2020-2023  润新知