Java异常处理与I/O系统详解
异常处理相关要点
- 异常捕获与类型约束
- 在Java中,应该只捕获特定类的异常。若将对象向上转型为基类型,编译器会强制要求捕获基类型的异常,这些约束有助于生成更健壮的异常处理代码。
- 异常规范虽在继承时受编译器强制,但它并非方法类型的一部分,方法类型仅由方法名和参数类型构成。所以,不能基于异常规范重载方法。而且,基类方法有异常规范,派生类方法不一定需要有,异常规范在继承和重写时可能会变窄,但不能变宽,这与类接口在继承时的规则相反。
- 构造函数中的异常处理
- 编写含异常的代码时,要时刻思考:“若发生异常,能否正确清理资源?”在构造函数中这一问题尤为突出。构造函数使对象进入安全初始状态,但可能执行如打开文件等操作,这些操作需用户调用特殊清理方法才能完成清理。若在构造函数内抛出异常,清理操作可能无法正常进行,因此编写构造函数时需格外谨慎。
- 有人可能认为
finally块是解决之道,但并非如此简单。finally块每次都会执行清理代码,即便你希望在清理方法运行时才执行。若要在finally块中进行清理,需在构造函数正常结束时设置标志,若标志已设置则不在finally块中执行操作。不过这种方式不够优雅,应尽量避免,除非不得已。
- 示例:InputFi
超级会员免费看
订阅专栏 解锁全文
2901

被折叠的 条评论
为什么被折叠?



