分享
 
 
 

TIJ阅读笔记(第九章)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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异常处理的目的就是要让我们能用比现在更少的代码,以一种更简单的方式来开发大型,可靠的程序,并且让你在开发过程中能更自信“你的程序里面没有未经处理地错误”。异常不是特别难学,但是却能给项目带来立杆见影的效果。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有