- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java编程思想读书笔记(10章下).doc
Java编程思想读书笔记(10章下)
四. 继承中异常
1. 关于构造函数中的异常
1.1 构造函数中的异常规则
某个derivedclass构造函数的异常规格接口可以比其所调用的父类的构造函数的异常规格接口宽,但决不能变窄。
1) derivedclass的构造函数必须在自己的异常规格中声明所有baseclass构造函数的异常规格中所声明的异常。
2) 在derivedclass的构造函数的异常规格中还可以声明新的异常,即声明在baseclass构造函数的异常规格中没有声明的异常。
1.2 原因
当在产生一个derivedclass的对象时,会在derivedclass的构造函数中调用baseclass的构造函数(初始化过程请见第6章),所以在derivedclass的构造函数中可能会抛出baseclass构造函数的异常规格中声明的异常,因此要在derivedclass的异常规格中声明baseclass构造函数的异常规格中声明的异常。
**:如果调用的函数的异常规格中声明了异常,那么在调用该函数的时候要捕捉它的异常规格中声明的异常。但在derivedclass构造函数中却无法捕捉其baseclass构造函数所掷出的异常。
2. 关于非构造函数的异常规则
2.1 某个函数的异常规格接口在继承和重载中可以变窄,但决不能变宽
要覆写baseclass的函数时,如果被覆写函数(baseclass中的函数)的异常规格中声明了异常,那么覆写函数(derivedclass中覆写了baseclass中的函数的那个函数)的异常规格中可以声明(1)与被覆写函数完全相同的异常;(2)被覆写函数异常规格中的部分异常或其子类异常;(3)不声明异常规格。
2.2 原因
这么做是为了满足能处理被覆写函数的代码,不用做任何修改就能处理覆写函数的代码的原则。
如果覆写函数的异常规格中声明了在被覆写函数的异常规格中不存在的异常,那么能处理被覆写函数的代码就不能处理覆写函数,因为没有捕捉覆写函数中不存在于被覆写函数中的异常声明。
import java.sql.SQLException;
class BaseClass{
public void f(){}
}
class DerivedClass1 extends BaseClass{
//public void f() throain(String[] args){
BaseClass bc = neport java.lang.Exception;
class BaseException extends Exception {}
class Derived1Exception extends BaseException {}
class Derived2Exception extends BaseException {}
class Derived11Exception extends Derived1Exception {}
class BaseClass{
BaseClass() throws Derived1Exception {}
BaseClass(int i) throws BaseException {}
BaseClass(int i, int j) {}
//在覆写f()时不能声明异常规格
public void f() {}
//在覆写g()时可以不声明异常或声明BaseException异常或声明
//BaseException异常的子类
public void g() throws BaseEx
12下一页 [教育资源网]edu..,。ception {}
//在覆写u()时可以不声明异常
public void u() throain(String[] args){
//捕捉的是相应的构造函数的异常
try{
BaseClass bc1 = new DerivedClass1();
}
catch(BaseException be) {}
try{
BaseClass bc2 = new DerivedClass1(bc2);
}
catch(Derived1Exception be1) {}
catch(Derived2Exception be2) {}
//通过向上转型来调用函数
BaseC
您可能关注的文档
- 90后的媒介形象构建分析.doc
- Access为后台数据库的网站统计系统--.doc
- Access使用宏控制程序--.doc
- ACCESS入门教程(十)为查询制定规则--.doc
- AD LDS管理工具入门攻略.doc
- AD RMS 权限策略模板创建和部署攻略.doc
- AD的备份与标准还原:深入浅出Active Directory系列(四).doc
- AFP启动子调控的小鼠IL1β重组载体的构建及其在肝癌H22细胞中的表达.doc
- After Effects中Shatter(碎片)滤镜的使用方法与实践.doc
- AF内固定系统治疗胸腰椎骨折的临床研究.doc
- 2025年吉林省蛟河市事业单位考试(自然科学专技类C类)职业能力倾向测验强化训练试题集附答案.docx
- VP-x231-CE7_使用说明书手册_v1.0.1.pdf
- viewpac_wince-based_用户操作说明书手册_v1.0.12.pdf
- WinPAC_8x4x_用户操作说明书手册_v2.0.9.pdf
- tM-Series_DIO_用户操作说明书手册.pdf
- tET_tPET-P(D)2POR2_用户使用说明书手册_tc_v12.pdf
- ICP DAS MQTT SDK 使用说明书手册_简体_v1.0.pdf
- ViewPAC_WinCE-Based_用户操作说明书手册_v1.0.13.pdf
- tET_tPET-P(D)6_用户使用说明书手册_tc_v12.pdf
- db-24por_24_12ssr_使用操作说明书手册.pdf
文档评论(0)