1. Throwable的方法

String getMessage()

String getLocalizedMessage()
String toString()
void printStackTrace()
每个方法都比前一个提供更多的信息

2. 重新抛出异常

catch (Exception e) {

System.err.println(“An exception was thrown”);

throw e;

}

重抛异常会把异常抛给上一级环境中的异常处理程序,同一个try快的后续catch字句将被忽略。

由于只是把当前异常对象重新抛出,printStackTrace()方法显示的将是原来的异常抛出点的调用栈信息,而非重新抛出点的信息。要想更新这个信息,把throw e;改成

throw e.fillInStackTrace();

3. 异常链

有时候你需要处理一个异常并抛出另一个,但仍要保持原异常的信息,这被成为异常链。

Throwable的三个基础子类Error, Exception, RuntimeException都有一个接收cause参数的构造器。如果想建立这三个子类以外的异常链,就得使用initCause()方法。

4. 标准Java异常

Throwable有两个直接子类:Error类代表了系统运行期错误,通常情况不用捕获;Exception类则是Java类库、用户的方法。通常要处理的是Exception

当然,异常类中最重要的还是类名。

异常并非都在java.lang中,有些还在util, net, io等库中。

5. RuntimeException

RuntimeException通常由Java自动抛出,如

if (reference == null) throw new NullPointerException();

是多余的。

如果一个RuntimeException被抛出后一直到main方法也未被处理,printTraceStack()方法被自动调用。

6. finally

没有垃圾收集器或析构函数自动调用的语言中,finally的重要性在于释放内存。而Javafinally则多用在使对象恢复到原来的状态,如打开的文件、网络连接,在屏幕上的绘图等。

7. 异常丢失

try {

lm.f();

} finally {

lm.dispose();

}

如果lm.f()lm.dispose()都会抛出错误的话,f()中抛出的错误会被彻底丢失。C++中就不存在这个问题。

所以对于会抛出错误的方法,最好将他们放入每一个try-catch块中。


posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2.23 Java notes - Error Handling with Exceptions

Posted on 2007-04-22 20:25 ZelluX 阅读(247) 评论(0)  编辑  收藏 所属分类: OOP
2007-02-23 19:38:46
只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问