




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章异常处理 2 主要内容 掌握Java规范中的异常处理机制怎样用try catch finally语句进行捕获和处理异常掌握怎样自定义异常类掌握使用异常时的一般原则熟悉Java系统中定义的标准异常 3 5 1异常处理 5 1 1异常处理机制程序中的错误不可避免 只能尽可能的减少错误捕捉错误的最佳时机 在编译时捕捉错误编译时不能发现错误 怎么办 在运行期捕捉错误Java在语言一级提供了运行期的错误处理机制 异常处理机制 4 异常 什么是异常 异常是指在某些情况下 正在执行的代码块或方法无法继续进行的问题 在Java中异常是一个对象 该对象包含了异常的名字 出现位置等信息 例如 整数运算中 除数为零 如果对除数没有进行检查 运行时除数的值是0 这时这段代码不知道如何去处理这种错误 会抛出一个异常 程序原来的流程被终止 定义了一个引用 但是编程时忘了给该引用赋值 即该引用并未指向任何对象 程序执行时会抛出一个空指针异常 5 抛出空指针异常的例子 publicclassNullExceptionDemo CarmyCar voidstart myCar starEngine publicstaticvoidmain String args NullExceptionDemoexceptionDemo newNullExceptionDemo exceptionDemo start System out println startcar 6 异常处理机制定义 Java中定义了很多异常类 每个异常类都代表了一种运行错误 异常类中包含了运行错误的信息和处理错误的方法等内容 每当Java程序运行过程中发生一个可识别的运行错误时 即该错误有一个异常类与之相对应时 系统都会产生一个相应的该异常类的对象 即抛出一个异常 一旦一个异常对象产生了 系统中就一定有相应的机制来处理它 这称为异常的捕获 确保不会产生死机 死循环或其他对操作系统的损害 从而保证了整个程序运行的安全性 这就是Java的异常处理机制 7 java的异常处理机制就是三个步骤 1 异常的抛出2 异常的捕获3 没有捕获异常的代码 程序将终止运行 8 Java中所有的异常类都是java lang Throwable的子类 Throwable类 Exception类 Error类 自定义异常类 ArrayIndexOutOfBoundsException类 NullPointerException类 9 Throwable的2个重要子类 Exception类和Error类 Exception类定义的是较轻的错误 你可以编写代码来处理这类错误 Exception出现原因 打开的文件不存在 网络连接中断 操作数超过允许范围 想要加载的类文件不存在 试图通过空的引用型变量访问对象 数组下标越界等 Error类用来处理运行环境方面的异常 一般会导致程序停止执行 如 虚拟机错误 装载错误 动态连接错误 这类异常主要是和硬件有关系 而不是由程序本身抛出 通常 Java程序不对这类异常进行处理 10 异常分类 异常分为系统定义异常和用户自定义异常系统定义异常 指java中对一些常见问题提供了对应的异常类用户自定义异常 程序员对特定问题 根据java规范编写的异常类 11 5 1 2异常的处理和捕获 publicclassNullExceptionDemo1 CarmyCar voidstart myCar starEngine publicstaticvoidmain String args NullExceptionDemo1exceptionDemo1 newNullExceptionDemo1 try exceptionDemo1 start System out println startcar catch NullPointerExceptione System out println GotException e getMessage 产生了异常对象被抛出 程序终止 该语句不会被执行 处理异常对象 执行结果 GotException null 12 异常的处理和捕获的语法格式 try 可能产生异常的代码放在此 catch 异常类名1异常对象名 在此处理异常类型1对应的异常 catch 异常类名2异常对象名 在此处理异常类型2对应的异常 finally 清理资源的语句放在此处 13 异常处理语句的使用说明 1 一条try语句后可以有多条catch语句和一条finally语句 有try语句 后面必须有catch语句或finally语句 2 try块中某条语句出现异常 则该条语句后面的语句不再被执行 程序流程被转到相应的catch语句 如果try中没有出现异常 则执行后续语句 3 执行哪条catch语句 系统根据抛出的异常种类执行相应的catch语句 且catch语句只能执行一次 捕获异常的匹配规则 抛出的异常对象与catch方法的参数类型相同 抛出的异常对象是catch方法的参数类型的子类 按catch语句的顺序捕获异常4 所以多个catch语句应当注意顺序 即先是具体的异常 后是一般的异常 14 将异常抛出给上层代码 当前的某句代码可能会出现异常 我们不想在此捕获异常 即不将该句代码放在try块中 那么我们可以将异常抛出给上层的代码 例子 NullExceptionDemo java 15 将异常抛出给上层代码 在start方法体中 对myCar进行检查 如果是null则抛出一个异常throw关键字 抛出异常对象 使用形式 throw异常的实例throw的效果类似于return语句 会对程序流程产生影响 在上述例子中 throw语句后面的语句不会被执行 16 将异常抛出给上层代码 start方法体中的语句会抛出异常 那么必须在start方法的后面使用throws关键字来显式地说明该方法会抛出什么异常 voidstart throwsNullPointerException if myCar null thrownewNullPointerException myCarisnull myCar startEngine 17 将异常抛出给上层代码 在main方法中调用start方法时 必须将start方法放在try块中 如果出现了异常在catch块中进行捕获 publicstaticvoidmain String args NullExceptionDemoexceptionDemo newNullExceptionDemo try exceptionDemo start System out println startcar return catch NullPointerExceptione System out println Gotexception e getMessage 18 5 1 3finally语句 在try catch finally结构中 无论是否有异常出现 都会执行finally语句 换句话说 finally是异常处理的一个统一的出口 finally的作用 try中的语句可能会占用资源 把占用的资源进行回收 必须在finally中进行使用资源的例子 JDBC中创建连接对象 数据库中的连接对象是资源 是有限的 如果占用了 别的程序可能无法再连接数据库了 所以 必须要在finally中释放连接对象 让数据库回收连接 让其他程序使用 19 finally语句 try语句和catch语句块中增加return语句 finally仍会被执行Try中执行System exit 时 立即结束程序 案例5 1 NullExceptionDemo2 java 案例5 2 课本P111 20 5 2用户定义的异常类 用户自定义异常主要用来处理用户程序中特定的逻辑运行错误 1 定义异常类classMyExpextendsException 或继承其他异常类 定义新的属性 重载构造方法例 MyExp Stringmsg super msg 重载原方法 或定义新方法 2 抛出异常类 throw异常类对象 例 thrownewMyExp 年龄超过规定 例 thrownewException 21 Exception类 构造方法Exception Exception String异常描述 Exception类的方法均继承自Throwable类方法StringgetMessage 返回异常描述 StringtoString 返回异常对象详细信息 voidprintStackTrace 打印异常发生的路径 即引起异常的方法调用嵌套序列 22 自定义异常 声明一个新的异常类 该异常类必须从Java已有定义的异常类继承 如Exception IOException等为新的异常类定义属性和方法 或重载父类的属性和方法 使这些属性和方法能够体现该类所对应的错误的信息 23 classMyExceptionextendsException 自定义例外publicMyException publicMyException Stringmsg super msg publicclassInheriting publicstaticvoidf throwsMyException System out println ThrowingMyExceptionfromf thrownewMyException 抛出自定义例外 publicstaticvoidmain String args try f 处理自定义例外 f 是静态方法 可直接调用catch MyExceptione e printStackTrace endofmain endofclassInheriting 案例5 3 课本P113 24 5 3异常规范 1 在合适的地方来处理问题2 在调试代码的时候 通过异常发现并解决问题后 应再次调用引起问题的方法 检查是有还有异常发生3 针对一个方法输入不希望的参数来对方法的代码的稳定性进行检查4 在当前运行环境中把能做的事情做完 把不希望在这里被处理的异常抛到最高层5 不要把异常处理的代码弄得过于复杂 25 5 4标准异常介绍 Java中定义了许多Exception的子类 这些子类分为2种 RuntimeException 运行异常 Non RuntimeException 非运行时异常 26 异常类 Throwable类 Exception类 Error类 自定义异常类 ArrayIndexOutOfBoundsException类 NullPointerException类 RuntimeException类 Non RuntimeException类 IOException类 27 Exception类及其子类 运行时异常RuntimeException 程序员编程错误java程序运行时常常遇到的各种异常的处理 如算术运算异常ArithmeticException 由除0错等导致 数组越界异常ArrayIndexOutOf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行金华市浦江县2025秋招笔试价值观测评题专练及答案
- 监理安全考试题及答案
- 家政保姆考试题目及答案
- 2025年广东惠来县县纪委监委等部门属下事业单位招聘61人笔试高频难、易错点备考题库及答案详解一套
- 农发行潍坊市昌乐县2025秋招笔试EPI能力测试题专练及答案
- 2025年烟草职业技能鉴定题库及答案详解1套
- 2025年自考专业(工商企业管理)模拟试题及参考答案详解【夺分金卷】
- 河北省2025年河北省疾病预防控制中心选聘工作人员3名笔试历年参考题库附带答案详解
- 定海区2025浙江舟山市定海区部分事业单位招聘33人笔试历年参考题库附带答案详解
- 2025年计算机四级题库试题含答案详解(预热题)
- 2025-2030中国高尔夫俱乐部行业市场现状分析及竞争格局与投资发展研究报告
- 不同负重增强式训练对跆拳道运动员下肢肌肉力量和灵敏素质的影响
- 村书记考试试题及答案
- 《库存优化模型》课件
- 幼儿园办公家具教学家具采购招标文件
- 植入式给药装置护理技术(输液港护理团标) 课件
- 2023-2024部编人教版5五年级语文上册电子课本课件【全册】
- 抓草机管理制度
- 选煤厂安全知识培训课件
- 支部三会一课记录范文
- 2025《导游业务》高分必会试题库1000题-选择600题
评论
0/150
提交评论