异常抛出小结(2)
返回主页
重新抛出异常
- 将异常抛给上一级环境中异常处理程序;
- 省略同一个try块后的catch子句;
异常链
在捕获一个异常后抛出另一个异常,希望把原始异常信息保存下来
异常名称可以见名知义
- 尽管通常不用捕获RuntimeException异常,但还是可以在代码中抛出RuntimeException类型的异常;
- 如果RuntimeException没有被捕获而直接到达main(),那么在程序退出前将调用异常的printSrackTrace()方法;
- 只能忽略RuntimeException及其子类类型的异常,其余由编译器强制实施。
究其原因
RuntimeException代表编译错误- 无法预料的错误
- 作为程序员应该检查的错误,例如数组下标越界
使用finally进行清理
- 无论try块中的异常是否抛出都将得到执行
- 对于无垃圾回收和析构函数自动调用机制的语言,finally保证无论try块发生什么,内存总会得到释放;
- 如果把finally子句和带标签的break及continue配合使用,在java中就没有必要再使用goto语句了
在finally内部,从何处返回无关紧要
- java异常实现也会被忽略
- 当覆盖方法的时候,只能抛出在基类使用的代码应用到其派生类对象的时候,一样可以工作。
关于异常匹配
1.抛出异常的时候,异常处理系统会按照代码的书写顺序找出“最近”的处理程序,找到匹配的处理程序之后,它就认为异常将得到处理,
然后就不再继续进行查找。
2. 派生类对象也可以匹配其基类的处理程序
异常处理的一个重要原则
只有在你知道如何处理的情况下才捕获异常。
重要目标
把错误处理的代码同错误发生地点相分离
1. 把当前运行环境下能做的事情尽量做完,然后把相同的异常抛到最高层
2. 把当前运行环境下能做的事情尽量做完,然后把不同的异常抛到最高层