小节:
异常其实就是将问题进行封装,抛给调用者。
如果声明了,就需要调用者处理(继续抛或者捕获)。
什么时候声明?什么时候捕获?
功能内部可以解决就捕获,不能解决或者解决还必须告诉调用者问题,这时就应该声明。
finally的作用:无论是否有异常发出,都需要资源进行释放。资源释放就是定义在finally的代码块中。
练习:老师用电脑上课。电脑可能出现的问题是:电脑蓝屏、电脑冒烟。
异常转换:根据不同的对象产生不同的异常。
封装本层异常,对外暴露对方能处理的异常。
覆盖时:
子类方法覆盖父类方法只能抛出父类方法异常或者该异常的子类。如果父类方法抛出多个异常,子类只能抛出父类异常的子集。
原则:就是子类的异常必须要在父类的异常处理控制中。
注意:有一种情况只能try不能throws。被覆盖的方法没有抛出异常(像接口中的方法),那么子类在覆盖时,子类方法发生了异常,只能try。(很多情况是子类方法抛出RuntimeException异常,这样就不用声明)。