快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

TIJ阅读笔记(第九章)


9:用非常来处理错误

基本非常  “非常条件(exceptional condition)”是一种能阻止正在运行的方式或其某一部分继承运行下去的问题。    非常的参数    所有的标准非常都有两个构造函数;第一个是默认的构造函数,第二个是要拿一个字符串当参数的。

捕捉非常  “守护区域(guarded region)”是一段可能产生非常的代码,并且后面还跟着要处理这些非常的代码。    Try区块    非常处理程序(exception handler)    “中止”还是“继承”

创建你自己的非常   Thorowable类(Exception是从它那里继续的)printStackTrace()方式会返回“被调用的方式是经过怎样一个顺序到达非常发生地点”的信息。缺省情况下,这些信息会送到标准错误流,但是这个方式的重载版也答应你将结果送到其他流。   对于非常类来说,getMessage()有点像toString()。

非常说明  会在编译时进行检查并且强制得到处理的非常被称为checked exception.

捕获任意类型的非常  重抛非常    fillInStackTrace(),这个方式会将当前栈的信息塞进旧的非常对象中,并返回一个Throwable对象。    非常链(exception chaining)    JDK 1.4中所有的Throwable的子类都有一个能接受cause(原因)对象的构造函数。这个cause就是用来保存前一个非常的。    在Throwable的子类中,只有三种基本的非常类提供了带cause参数的构造函数,它们是Error(供JVM报告系统错误只用),Exception和RuntimeException。假如你要链接其他非常,那就不能用构造函数,而只能用initCause()方式了。

标准Java非常  RuntimeException表示编程错误:    1。一种你无法预料的错误。比如不在你控制之内的null reference。    2。一种由于“程序员忘了检查它应该检查的错误条件”而造成的错误(比如ArrayIndexOutOfBoundsException,你访问数组的时候应该对数组的大小做一个检查)。第一种情况下发生的非常,常常会演变成第二种情况下的问题。

用finally进行清理  假如你把try区放进一个循环,你就能构建一个程序运行之前必须满意的条件了。你也可以在循环里加上static的计数器,或其它什么东西,让它退出之前多试几种方式。这样你就能把程序的强壮性就能更上一个台阶。    finally是用来干什么的?    当你需要把内存以外的东西设置到原先状态的时候,finally就显得很有必要了。    甚至是在“非常没有被当前这组catch子句所捕捉”的情况下,finally也会在“非常处理机制在更高一层的运行环境中开始寻找处理程序”之前得到执行。    错误:丢失的非常

加在非常上面的限制  派生类的构造函数不能捕捉任何由基类构造函数抛出的非常。  在继续过程中,编译器会对非常说明作强制要求,但非常说明本身并不属于方式的特征(signature),特征是由方式的名字与参数的类型组成的。因此,你不能根据非常说明来重载方式。此外,一个出现在基类方式的非常说明中的非常,不一定会出现在派生类方式的非常说明里。这点同继续的规则有明显不同,在继续中,基类的方式必须出现在继续类里。换一句话说,在继续和覆写的过程中,方式的“非常说明的接口”不是变大而是变小了--这正好和接口在继续时的情形相反。

构造函数  所有的清理--除了内存清理之外--都不会自动发生。

非常的匹配

其它方式

非常运用的原则  1。在合适的地方处理问题。(避免在自己还不知道该如何处理的情况下去捕获非常)。  2。把问题解决掉,然后重新调用那个引起问题的方式。  3。修正一下问题,然后绕过那个方式再继承下去。  4。用一些别的,不预备让这个方式返回的数字来进行计算。  5。把当前运行环境下能作的事情全部做完,然后把一样的非常抛到更高层。  6。把当前运行环境下能做的事情全部做完,然后抛一个不同的非常到更高层。  7。中止程序。  8。简化。(假如非常结构把事情搞得太复杂了,那用起往返事异常痛苦也很烦人)  9。把类库和程序做得更安全。(这即使在为调试作短期投资,也是在为程序的健壮性作长期投资。)

总结:Java非常处理的目的就是要让我们能用比现在更少的代码,以一种更简朴的方法来开发大型,可靠的程序,并且让你在开发过程中能更自信“你的程序里面没有未经处理地错误”。非常不是特殊难学,但是却能给项目带来立杆见影的效果。




返回类别: 教程
上一教程: Java变量的缺省(默认)值--只有类的instance变量和static变量才有
下一教程: JAVA写的NotePad

您可以阅读与"TIJ阅读笔记(第九章)"相关的教程:
· TIJ阅读笔记(第十四章)
· TIJ阅读笔记(第十二章)
· TIJ阅读笔记(第六章)
· TIJ阅读笔记(第十三章)
· TIJ阅读笔记(第十一章)
    微笑服务 优质保证 索取样品