Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1326961
  • 博文数量: 131
  • 博客积分: 9950
  • 博客等级: 中将
  • 技术积分: 1492
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-05 18:32
文章分类

全部博文(131)

文章存档

2008年(3)

2007年(37)

2006年(91)

我的朋友

分类: Java

2006-10-25 16:28:42

对JAVA 中的异常处理学习
  异常处理机制是当程序出现错误后,程序应该怎么处理。具体来说,异常处理机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生变化,程序的控制权移到异常处理器。她有五个关键字:try,catch,finally,throw,throws. try的意思就是测试她所包含的代码段中是否发生异常。catch的意思是当发生异常后,捕捉他并做相应的处理,使程序能够正常执行下去。throw的意思是在程序中明确发生异常。 thrwos 的作用是如果一个方法可以引发异常而他本身并不对异常进行处理,而是将这个异常抛给调用他的方法。finally 是无论发不发生异常都要被执行代码执行。
      
 可控式异常(Checked Exception)和执行时异(RuntimeException)
     在某些情况下异常的发生是可预测的,例如使用I/O功能时,可能会出于硬件的环境问题,是得无法正常从硬件取得输入和输出,这种错误是可以预期发生的,像这类的异常称之为可控制式异常,这个异常你要么就在try...catch中处理,要么就在方法上使用throws表示由调用他的调用者来处理。在程序运行期间发生的异常我们就称之为执行时异常,我们无法预测这个异常一定发生,要看这个程序逻辑写的如何,因而不需要特别的使用try...catch 或是在方法上使用throws声明也可以通过编译,所以也称之我非可控式异常。
     JAVA所处理的异常主要可以分为两大类:一种是严重的错误,例如硬件错误或内存不足等问题,与此相关的类应是为于java.lang下的Error类及其子类,对于这类错误通常程序是无力自行恢复的;另一种是非严重的错误,代表可以处理的状况,例如使用者使用了不合格式的数据,这种错误程序有机会恢复至正常运行状况,与这类错误相关的类是为于java.lang下的Exception类及其子类。Error类与Exception类都是继承自Throwable类,Throwable类拥有几个取得相关异常信息的方法。
getLocalizedMessage()取得异常对象的区域化信息描述
getMessage() 取得异常对象的信息描述
printStackTrack()显示异常堆栈信息,这个方法在追踪异常发生的根源时相当有用。


 为什么要声明方法抛出异常?
方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。

为什么抛出的异常一定是已检查异常?
RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。

注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。

异常处理做什么?
对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。


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