




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章Java面向对象程序设计 cont 3 8内部类3 9异常处理 3 8内部类 对应4 14节 内部类是定义在某个类的类体或块中的类 内部类有多种形式 成员类静态成员类局部类匿名类 1 成员类 例 简单的内部类classB B System out println instanceofB classInnerB 定义内部类InnerB System out println InstanceofInnerB classInnerB classA publicstaticvoidmain String args Bbbb newB B InnerBinbbb bbb newInnerB 创建内部类对象System out println inbbb newB newInnerB 成员类 成员类的特点 创建一个内部类的对象 必须先有一个外包类的对象存在 外包类与其内部类之间完全互相信任 例 classB privateintx 100 classInnerB privateinty 1111 x 8888 voidshow System out println x 访问B518的private成员System out println y n publicvoidshow 外包类的方法 成员类 InnerBinB newInnerB 创建内部类对象System out println inB System out println inB y n 访问InnerB的私有成员inB show classA publicstaticvoidmain String args newB newInnerB show newB show 2 静态成员类 静态成员类的特点 只与外部类有关系 而不依赖于外部类的对象 因而静态成员类的创建不需要有外部类的存在 例 classB protectedstaticclassInnerB 静态成员类 classA publicstaticvoidmain String args System out println newB B InnerBinB newB InnerB System out println inB System out println newB InnerB 3 局部类 局部类定义在方法体内因而外部不可访问 不需要访问修饰符 注意 局部类的对象在堆中创建局部类可以访问外包方法之外的类的一切成员 局部类只能访问外包方法的final局部变量 4 匿名类 例 匿名类示例abstractclassC abstractvoidfoo classB publicCgo intx finalinty returnnewC publicvoidfoo System out println y 匿名类的定义是一个语句 要以 结束 publicvoidgogo Cc00 c00 foo 匿名类 publicclassA publicstaticvoidmain String args Ccccc newB go 1 2 cccc foo Ccc newB go 1 20 newB gogo cc newB gogo newC publicvoidfoo System out println Hello 匿名类 匿名类的特点 匿名类没有类名 它必须继承一个类或者实现一个接口 并且不能有显示的extends或implements子句 匿名类不能有构造方法 因为它没有类名 可以通过new的方法创建其对象 匿名类的创建与定义同时进行 匿名类只能一次性的创建其对象 由其父类句柄持有 匿名类既可以在方法体中 也可以在参数列表中 匿名类必须简单 3 9异常处理 参考教材4 16 异常 Exception 又称例外 是指程序执行过程中出现的不正常现象 任何一个程序都可能出现异常 如要打开的文件不存在 内存不够 数组访问越界等 Java作为一种面向对象语言 它设计了很多标准的异常处理类 采用throw catch 抛出 捕获 方式 捕获并处理异常 Java使异常处理标准化 使程序设计思路更清楚 理解更容易 本章将介绍异常处理方法 3 9 1Java异常处理的特点 与传统的错误处理技术相比 Java使用异常处理错误有以下优越性 1 隔离错误处理代码和常规代码 在传统的程序设计中 错误检测 报错和错误处理放在一起 从而经常导致代码产生许多复杂的分支 而Java的异常处理就可解决该问题 2 在调用栈中传播错误 Java的异常具有在方法调用栈中传播错误的功能 即可以向调用栈的上层方法传递异常 可以让调用栈的更上层的方法来捕获异常 做到只让关心错误的方法捕获它 3 9 2异常类的层次 一 所有异常类都是Throwable类的子类 Throwable属于java lang包 在程序中不必使用import语句引入即可使用 Exception和Error是Throwable类的直接子类 Exception是程序中所有可能恢复的异常类的父类 RuntiemException和Non RuntiemException是Exception的直接子类 Error由系统保留 包含链接或装载时出现的错误 以及和虚处理机相关的错误等 Java程序可以抛出系统定义好的异常类 也可以由用户自定义新的异常类 用户定义的异常类一般是Throwable类或其子类 3 9 2异常类的层次 二 3 9 2异常类的层次 三 1 运行异常运行异常是指Java程序在运行时发现的由Java运行系统引发的各种异常 其出现频率很高 检测运行异常的开销很大 所以编译器不要求捕获或声明运行异常 常见的运行异常如下所示 ArithmeticException 算术运算中除数为零 而产生的异常 ArrayIndexOutOfBoundsException 访问数组下标超界异常 3 9 2异常类的层次 四 ArrayStoreException 进行写数组操作时 对象或数据类型不兼容 导致该异常 ClassCastException 当试图把对象A转换为对象B时 如果对象A既不是对象B的实例 又非对象B的子类 将产生该异常 IllegalArgumentException 在方法的参数表中 如果参数无效 将产生异常 IllegalThreadStateException 非法改变线程状态 如启动已执行线程 导致异常 NegativeArraySizeException 当数组的长度是负数时 产生异常 3 9 2异常类的层次 五 NullPointerException 试图访问空对象的变量 方法或空数组的元素 产生的异常 SecurityException Applet试图执行被WWW浏览器安全设置所禁止的操作 产生异常 IncompatibleClassChangeException 当类的定义被改变 而引用该类的其它类没有被重新编译 则产生该异常 OutOfMemoryException 表示 内存不足 异常 NoClassDefException Java执行时找不到所引用的类 产生该异常 3 9 2异常类的层次 六 IncompatibleTypeException 试图实例化一个接口 产生该异常 UnsatisfiedLinkException 所调用的方法是本地方法 但执行时无法连接这个函数 将产生该异常 InternalException 是系统内部故障所导致的异常 3 9 2异常类的层次 七 2 非运行异常非运行异常能在编译时检测到 是类Non RuntimeException及其子类的实例 可通过throws语句抛出 Java在其标准包java lang java util java io 中定义的异常类都是非运行异常类 3 9 2异常类的层次 八 java lang包中定义的异常 ClassNotFoundException 找不到类和界面 CloneNoSupportException 对象引用了Object类的Clone方法 但没有实现Cloneable界面 IllegalAccessException 试图去访问另一个包中的类的非public方法 InstantiationException 使用Class类的newInstance方法试图去创建类的实例时 由于指定的类为界面 抽象类 数组而不能创建 InterruptedException 当一个线程正在等待时 另一个线程来中断这个线程 3 9 2异常类的层次 九 java io包中定义的异常 java io EOFException 在正常的输入操作完成之前遇到了文件结束 java io FileNotFoundException 找不到指定的文件 java io UTFDataFormatException 不能完成Java定义的UTF格式的字符串转换 3 9 2异常类的层次 十 包中定义的异常 ProtocolException 网络协议有错 SocketException 不能正常完成socket操作 UnknownHostException 网络host名不能被解析为网络地址 UnknownSeviceException 网络连接不能支持请求服务 3 9 3抛出异常 一 Java通过使用throws语句指定异常类型并抛出异常 其格式如下 publicvoidreadFile throwsIOException 包含可能产生IO异常的语句 publicvoidmyfunc throwsMyException1 MyException2 3 9 3抛出异常 二 在throws语句中指定的异常类可以是实际抛出异常类型的父类 为了确定需要抛出哪些异常方法有二 一是通过经验 仔细查找所调用的方法可能产生的异常 二是先不作任何声明 等待编译器报错 编译器将通报所有需要用throws语句抛出的异常 3 9 3抛出异常 三 也可在语句块中用throw语句抛出异常 可以是用户定义的异常 这种方式应被定义在满足一定条件时执行 例如 try If 满足条件 throw newSelfDefException Catch SelfDefExceptione classSelfDefExceptionextendsThrowable 3 9 4异常处理 一 当程序发生异常时 就会抛出一个异常 这个异常可以被程序捕获 进行相应处理 在这个结构中使用了三个关键字 try catch finally try后大括号中的程序段称为保护代码 protectedcode 可能产生某种异常 在try的 中不进行任何异常处理 紧接try之后的是一系列catch语句 这才是处理异常的正确地方 3 9 4异常处理 二 catch与方法的定义相似 需要一个参数 该参数必须是Throwable类或其子类的一个对象或接口 catch的作用是当系统或应用程序抛出一个异常后 通过与catch的参数比较 如果相匹配 就执行catch方法中的异常处理程序段 否则与一下catch继续进行相匹配的比较 3 9 4异常处理 三 相匹配的含义指符合下列三种情况之一 被抛出的异常类与catch参数指定类是同一类被抛出的异常类是catch参数指定类的子类 如果catch参数是一个接口 而被抛出的异常类实现了这个接口 catch检查匹配是顺序进行的 当程序中包含多条catch语句时 如果catch安排的顺序不当 可能导致某些catch后的处理程序段永远不会被执行 3 9 4异常处理 四 例如下面的程序段 catch IOExceptione 异常处理1 catch FileNotFoundExceptione 异常处理2 所以在使用catch语句时 应该清楚所有参数所属类的层次 以便正确安排catch语句的顺序 如果出现这种错误 javac编译器会发出错误信息 catchnotreached 3 9 4异常处理 五 无论try是否抛出异常 还是某个catch进行了异常处理 finally后的程序段总要被执行一次 唯一不被执行的情况是try或catch中执行了System exit 则程序立即中止 在try catch finally这个编程结构中 catch语句和finally语句是可选的 但至少使用其中一个语句 3 9 5嵌套的异常处理 在try
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025设备租赁合同的市场分析
- VB编程工具使用试题及答案总结
- 项目合作协议范文
- 主管在危机沟通中的角色研究计划
- 网络连接优化策略试题及答案
- 数据库系统构架与应用考题及答案
- 提升工作灵活性的手段计划
- 2025关于陶瓷地砖销售合同书
- 行政法与经济法的交集试题及答案
- 行政管理与公共服务关系探讨试题及答案
- 自动生成的文档-2025040814-11
- (二模)济宁市2025年4月高三高考模拟考试生物试卷(含答案)
- DB32T 4772-2024自然资源基础调查技术规程
- 膝关节韧带损伤术后护理
- 雕像制作合同协议
- 2025年全国燃气安全生产管理主要负责人考试笔试试题(500题)附答案
- 列那狐测试题及答案
- 《酉阳杂俎》女性角色研究
- 浙江省嘉兴市2025届高三下学期4月教学测试物理+答案
- 婴幼儿照护 课件 2遗尿现象的干预
- 2025年广东省深圳市31校中考一模历史试题及答案
评论
0/150
提交评论