TIJ C12 异常
TIJ Chapter 12
Exceptions
系统特殊情况分类
- Error
- RuntimeException
- Exception
自定义异常
异常是作为类而存在的,因此也可以自定义异常。
自定义的异常需要extends Exception即可。
异常声明
- 在方法的最后加上throws ExceptionName即可,表示该方法有可能会抛出这些异常。
异常处理
- 使用try代码块作为监控区域来捕捉异常
- 使用catch代码块来处理相应的异常,一个try可以对应多个catch,且派生类异常应先处理,基类异常后处理,否则派生类会被覆盖。
- 最后可以跟上finally语句,finally里的代码无论如何都会被执行,因此可以用来放清理内存的代码。要注意多个层次的finally的排列
继承中的异常
- 继承类的覆盖方法只能抛出基类方法的异常说明里列出的异常
- 实现接口无法为继承类覆盖方法增加基类方法里没有的异常声明。
- 如果是继承类里的新方法,可以随意声明异常。
- 基类方法里声明的异常,继承类里的覆盖方法可以不声明。
也即:对于异常声明,只能从基类方法里减,不能增加。 - 派生类构造器必须包含基类构造器的异常声明。
- 不能基于异常说明来重载方法。
异常相关方法
- e.printStackTrace() 可以追踪打印出异常的产生各栈层级。括号中可以指定输出的流。
- String getMessage()
- String getLocalizedMessage()
- throw (Exception)e.fillStachTrace() 用于重新抛出异常时,将当前栈层级当做异常产生源。
- initCause() 用于异常链的构筑 == 但是书里并没讲清楚!! ==
浙公网安备 33010602011771号