首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

第十二章 通过错误处理异常

2012-10-08 
第十二章 通过异常处理错误异常参数throw new NullPointerException(t null)关键字throw将触发许多十

第十二章 通过异常处理错误
异常参数

throw new NullPointerException("t = null");

关键字throw将触发许多十分奇妙的事情。通常,你首先使用new来创建对象,用以表示错误情况,此对象的引用将传给throw。尽管返回的异常对象其类型通常与方法设计的返回类型不同,但从效果上看,它就像是从方法“返回”的。
此外,你能抛出任意类型的Throwable(它是异常类型的根类)对象。

栈轨迹


所以答案是:如果RuntimeException没有被捕获而直达main( ),那么在程序退出前将调用异常的printStackTrace( )方法。

请务必记住:你只能在代码中忽略RuntimeException(及其子类)类型的异常,其它类型异常的处理都是由编译器强制实施的。究其原因,RuntimeException代表的是编程错误:

1.你无法预料的错误。比如从你控制范围之外传递进来的null引用。
2.作为程序员,你应该在代码中进行检查的错误。(比如对于ArrayIndexOutOfBoundsException,你就得注意一下数组的大小了。)在一个地方发生的异常,常常会在另一个地方导致错误。

异常的限制

    当你重载方法的时候,你只能抛出在父类方法的异常说明里列出的那些异常。这个限制很有用,因为这样的话,对父类能工作的代码应用到子类对象的时候,一样能够工作(当然,这是面向对象的基本概念),异常也不例外。
异常限制对构造器不起作用。派生类构造器的异常说明必须包含基类构造器的异常说明。注意,派生类构造器不能捕获基类构造器抛出的异常。

异常使用指南

你应该在下列情况下使用异常:

1.在恰当的级别处理问题。(在你知道该如何处理的情况下才捕获异常)。
2.解决问题并且重新调用产生异常的方法。
3.进行少许修补,然后绕过异常发生的地方继续执行。
4.用别的数据进行计算,以代替方法返回的期望值。
5.把当前运行环境下能做的事情尽量作完,然后把相同的异常重抛(rethrow)到更高层。
6.把当前运行环境下能做的事情尽量作完,然后把不同的异常抛(throw)到更高层。
7.终止程序。
8.进行简化。(如果异常把问题搞得太复杂,那用起来会非常痛苦也很烦人。)
9.让类库和程序更安全。(这既是在为调试做短期投资,也是在为程序的健壮性做长期投资。)

热点排行