zoukankan      html  css  js  c++  java
  • 异常和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(数学运算异常)。

  • 相关阅读:
    关于通用对象和通用函数的设计思想
    用ROOT 身份打开 文件管理器的 命令
    hibernate深入学习笔记
    hibernate简括
    hibernate先删除数据,紧接着执行插入时的异常解决之道——中间不能调用flush()、clear()等方法
    Maximum Gap (ARRAY SORT)
    Evaluate Reverse Polish Notation (STRINGTYPE CONVERTION)
    Max Points on a Line (HASH TABLE
    PHPnow实现多端口服务配置
    mcrypt 在 Linux 安装
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12008534.html
Copyright © 2011-2022 走看看