Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194279
  • 博文数量: 69
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 720
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-03 11:35
文章分类

全部博文(69)

文章存档

2011年(13)

2010年(46)

2009年(10)

我的朋友

分类: Java

2010-07-21 11:20:05

Java100721:Exception简记

 
Hist:
20060912, draft
20100721, ‘checked exception’ modified
 
 
 

1. 基本语法

  

   Exception处理的基本语法如下,由try-block,catch-block,和finally-block组成。其中catch-block或finally-block可以不存在。另外catch-block可以为了拦截多种ExcetpionType而包含多个catch语句,一般的原则是拦截明确的狭义的ExceptionType的catch语句先于拦截一般的宽泛的ExceptionType的catch语句。

       try {

              code

       } catch (ExceptionType1 e) {

              exception code

       } catch (ExceptionType2 e) {

              exception code

       } finally {

              finally code

       }
 

2. 主要Exception类的hierarchy

 
       Throwable
       |

       |- Error

       |

       |- Exception

           |
           |- IOException
           |
           |- RuntimeException
    所有的exception必须继承Throwable。Throwable向下分支为Error和Exception两支,Exception的子类可以分为两类,一类是RuntimeException及其子类,不属于第一类的就是第二类的exception了。Error描述的是java系统的错误,对于这种错误程序员能做的有限。RuntimeException描述的是运行时产生的错误,一般认为如果发生了RuntimeException错误,那么说明编程存在问题,应当进行改进。
 

3. checked 与 unchecked

    Java规范中称Error,RuntimeException,和他们的子类是unchecked exception。其他exception称为checked exception。这样命名的原因是因为编译器只检查(check)class和method是否正确抛出(Throws)了checked exception, 而不要求(检查)程序明确写出抛出的unchecked exception。

 

       class YourClass Throws exceptionType

       {

              public methodName(...) Throws exceptionType

              {
                     ...
              }
       }
    写自己的exception时,如何判断使用checked exception还是使用unchecked exception?
   
    1)尽量使用checked exception
    好处有二,一是编译器可以帮助你检查,二是提醒和强迫你妥善处理这些exception。
 
    2)为了实现规定的接口,需要使用RuntimeException
    当实现某接口,而该接口却无法抛出你的checked exception类,这时有两种方法处理,一种是将你的exception类转换为接口允许的exception类,另一种就是转换为RuntimeException。这种转换技术就引出下节的话题,chained exception。
 

4. chained exception

 
    一个例子,
       try{
              ...

       } catch (LowLayerException e){

              Throwable highLayer= new HighLayerException("High Layer Exception");

              highLayer.setCause(e);

              Throw highLayer;

       }

    chained exception就是保留原来的exception信息,但是转换exception类后重新抛出。对于分层模型,这样做解耦了上下层接口和架构之间的依赖关系。

    大部分的观点推荐使用chained exception, 在程序中应当及时rethrow。

REF

1.       JLS

2.       Cay S. Horstman, Gary Cornell, Core Java 2 Valueme, 7Ed

3.       Sun Microsystems, Inc, The Java Tutorial
Locations of visitors to this page

阅读(1202) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~