高质量程序设计--异常

异常处理,是Java中最强大,也是最容易被误用的机制。

使用异常的第一步是决定是否使用异常,异常并不是在任何情况下都适用。

决定适用异常之后,必须决定如何适用异常。


所谓异常处理,就是通知客户程序发生了非正常情况的机制。

以下几种非正常情况:

    编译错误(compile error):语法错误。

   逻辑错误(logical error):算法错误。只有cheng程序员才能检查这种错误。

   运行时错误(runtime error):执行错误。一般为:数学运算发生溢出,磁盘空间不足或是文件损坏等在正常情况下不可能发生的错误。

异常就是JVM发给java程序的通知。java程序是JVM的客户。异常就是通知

 

 

条款1[规则】用时间频度来确定异常情况

当java程序违反了Java的语义规则时,Java虚拟机会将发生的错误表示为一个异常。

两种违反语义规则的情况:

      一种是Java类库内置的语义检查。如:数组下标越界,会引发IndexOutOfBoundsException;访问null的对象,会引发NullPointerException.

     另一种是:程序员自己定义的异常。

任何异常都会引起程序控制流的转移,当异常被抛出后,JVM会在抛出异常的方法中寻找最近匹配的Catch语句,如果没有,

则在调用方法中寻找,直至遍历调用栈中所以方法为止。如果没有找到任何匹配的catch语句,则会调用ThreadGroup.uncaughtException()方法。

 

所以的异常都是java.lang.Throwable的子类。更严谨一点说,我们应当尽量使它们仅仅是Error,Exception或者RuntimeException的子类。

 

finally关键字是对java异常处理模型的有益补充。finally块中的代码总会执行,而不管有无异常发生。 使用finally可以维护对象的内部状态,并且finally是释放非内存资源的最佳场所。

 

  异常对性能的影响表现在两方面: 一是异常的创建,捕获和处理都需要较高的代价。这同JVM处理异常的方式有关

    在java内存模型中,有一个称之为栈的内存区域,每一次方法调用,都会生成一帧来存储方法的相关信息,包括局部变量,参数,返回值和代码信息。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值