zoukankan      html  css  js  c++  java
  • Java中的异常处理

    一、异常的层次结构

    1、所有的异常都由Throwable继承而来,下一层分为两个分支,Error和Exception。

    Error:是无法处理的异常,比如OutOfMemoryError,应用程序不应该试图处理此种类型的异常,如果出现了这样的异常,除了通告给用户,并尽力使程序安全终止之外,再也无能为力了。

    Exception:是我们需要关注并可以处理的异常,其下由分为两个分支,RuntimeException和IOException(其他异常的统称)。由程序导致的错误属于RuntimeException,例如错误的类型转换、空指针访问、数组下标越界;IOException表示由资源或者输入不合法引起的异常,这种异常一般是可以预见并能够进行防范的,例如试图在文件尾部之后读取数据、打开错误格式的URL、访问不存在的文件等等

    2、Java语言规范将派生于Error类或RuntimeException的所有异常称之为未检查异常(unchecked exception);而派生与IOExceptoin的异常称之为以检查异常(checked exception)。

    对于unchecked exception异常,java编译器不要求必须进行异常捕获处理或者抛出声明,由程序员自行决定。对于checked exceptionjava编译器强制程序员必须进行捕获处理,比如常见的IOExeption和SQLException。否则编译都不会通过。

    3、处理异常的原则,如果本方法能够处理该异常,则在cache异常之后处理,否则通过throws语句把异常抛给调用方处理。

    二、try catch finally的执行顺序

    1、一般情况下:try----catch----finally

    2、如果try中有return:try----finally----return

    3、如果catch中有return:try----catch ----finally----return

    在后两种情况下,reurn会被暂存在栈里面,等到finally执行完再返回。

    这种机制保证无论出现什么情况,在try catch过程中finally都被执行一次,特别适合用于释放资源,例如释放数据库链接、释放打开的文件流等

    下面看这一段代码,结果t会是神马东东?

    public static final String test() {
              String t = "";
              try {
                  t = "try";
                  return t;
              }
             catch (Exception e) {
                  t = "catch";             
                  return t;
              }
              finally {
                 t = "finally";
         //return t;
             }
         }    

    上面我们讲到finally之前,return会被暂存到栈里面。上面代码里的t就会暂存起来,等到实际return的时候重新启用,所以上面的代码的正确返回值是"try"。

    但是如果我们在finlly字句中添加了return,那么前面try子句中的t值就会被淹没,此时实际的返回值会是"finally"

    三、try catch finally结构使用的建议

    不建议在finally块中添加return,因为会消化掉try catch中的异常信息,不利于错误的正常处理,合理的return语句的位置:

    1、return语句只在函数最后出现一次。
    2、return语句仅在try和catch里面都出现。
    3、return语句仅在try和函数的最后都出现。
    4、return语句仅在catch和函数的最后都出现。

    参考: 

    http://www.cnblogs.com/aigongsi/archive/2012/04/19/2457735.html

    http://blog.csdn.net/hguisu/article/details/6155636(图片来源)

  • 相关阅读:
    [Swift通天遁地]八、媒体与动画-(11)实现音乐播放的动态视觉效果
    [Swift通天遁地]八、媒体与动画-(10)在项目中播放GIF动画
    [Swift通天遁地]八、媒体与动画-(9)快速实现复合、Label、延续、延时、重复、缓冲、弹性动画
    [Swift通天遁地]八、媒体与动画-(8)使用开源类库快速实现位移动画
    net location
    移动js
    说说
    jquery mobile script
    jquery script
    保持整洁
  • 原文地址:https://www.cnblogs.com/mingziday/p/4614981.html
Copyright © 2011-2022 走看看