第 6 章 异常处理、递归和单体程序设计方法_第1页
第 6 章 异常处理、递归和单体程序设计方法_第2页
第 6 章 异常处理、递归和单体程序设计方法_第3页
第 6 章 异常处理、递归和单体程序设计方法_第4页
第 6 章 异常处理、递归和单体程序设计方法_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2020 4 22 1 第6章异常处理 递归和单体程序设计方法 2020 4 22 2 本章总体纲要 异常处理递归方法单体 Singleton 程序设计模式 2020 4 22 3 生活中的异常 正常情况下 小王每日开车去上班 耗时大约30分钟 但是 异常情况迟早要发生 一路畅通 堵车 撞车 2020 4 22 4 程序中的异常 publicclassHello publicstaticvoidmain String args System out print 请输入课程代号 1至3之间的数字 Scannerin newScanner System in intcourseCode in nextInt 从键盘输入整数switch courseCode case1 System out println C 编程 break case2 System out println Java编程 break case3 System out println SQL基础 输入 2输出 Java编程 输入 B程序中断运行 正常情况 异常情况 2020 4 22 5 什么是异常 异常就是在程序的运行过程中所发生的不正常的事件 它会中断正在运行的程序 绕行或者等待 请求交警解决 异常 面对异常该怎么办呢 通常情况下 我们会这样处理 程序运行 程序中断运行 堵车 撞车 生活中 我们会根据不同的异常进行相应的处理 而不会就此中断我们的生活 2020 4 22 6 什么是异常处理 Java编程语言使用异常处理机制为程序提供了错误处理的能力 程序中预先想好了对付异常的处理办法 异常 程序运行 处理完毕 程序继续运行 对异常进行处理 2020 4 22 7 为什么需要异常 强制程序异常 错误处理同时指定需要异常的种类异常处理模型提供了一种统一处理异常 错误的模式传统程序方法 设置标志位 或返回错误码 分别处理各种异常情况 但在编程时常常出现这样的情况 忘了对某些异常情况进行处理 尤其是当存在多个分支或者多个开发人员共同开发程序时 简化对异常情况的处理 减少if else语句 2020 4 22 8 Java中如何进行异常处理 Java的异常处理是通过5个关键字来实现的 try catch finally throw throws 捕获异常 catch try finally 执行可能产生异常的代码 捕获异常 无论是否发生异常 代码总能执行 手动抛出异常 抛出异常 throw 声明异常 声明方法可能要抛出的各种异常 throws 2020 4 22 9 格式 在try语句块中包含可能会产生异常的语句紧接着若干个catch语句块 进行异常处理catch语句块与finally语句块至少存在一个 try 可能会抛出异常的代码 catch ExceptionTyperef 异常处理代码 finally 2020 4 22 10 什么时候会发生异常 数组的下标越界打开不存在的文件网络无法连接操作数超出所要求的范围少了所需加载的类 自定义异常 要求程序处理 2020 4 22 11 处理异常的几种常用方法 一旦捕获异常 马上进行处理重新抛出异常捕获异常 但并不处理通过语句System exit 退出应用程序 2020 4 22 12 异常 Exceptions 类型 常见异常内存耗尽数组下标越界除数为0非法的参数 方法的参数 2020 4 22 13 异常 Exception 的层次结构 2020 4 22 14 运行时发生的异常 RuntimeExceptions 异常随时都可以发生ArrayIndexOutOfBoundsExceptionNullPointerException定义了引用 但不指向任何对象 object ClassCastException数据类型间的转换不合法良好的编程习惯 可以减少很多异常的发生 2020 4 22 15 受检异常和非受检异常 受检异常必须在方法声明时通过throws列出在编译时就能被检测出非受检测异常不必在throws列表中错误 Errors 和运行时异常 RuntimeExceptions 受检异常 必须处理才能通过编译运行时异常只有在运行时才能被发现错误常常指的是致命性错误 常常也无法处理 2020 4 22 16 处理多种异常 Exception 类型 如果含有多处catch语句块 则异常会被第一个与其相匹配的catch语句块处理 2020 4 22 17 finally语句块 在异常处理过程中 finally语句块总是会被执行到 无论有没有异常发生 也无论有没有异常被捕捉到可选项 finally语句块 通常位于catch语句块的后面可以用来释放try语句块中获得的资源例如 关闭在try语句块中打开的文件 2020 4 22 18 throws列表 在方法的声明处列出所有的受检异常返回类型方法名 参数列表 throws异常类型1 异常类型2 方法体 在本方法内就可以不处理这些异常调用该方法的方法就必须处理这些异常示例 publicstaticvoidg throwsException thrownewException 方法g结束 2020 4 22 19 异常处理 捕捉 或者 声明 如果一个方法调用一个抛出受检异常的方法 含有throws列表的方法 则该方法必须捕捉这些受检异常 或通过throws列表声明这些异常 2020 4 22 20 重新抛出异常 如果catch语句块不处理某种异常 可以重新抛出异常抛出异常的方法 throwe 由其外层的try catch语句块处理 2020 4 22 21 publicclassJ Exception publicstaticvoidmb throwException System out println 产生并抛出ArithmeticException类型的异常 thrownewArithmeticException publicstaticvoidmb catchArrayException try mb throwException System out println 在try语句块中的多余语句 catch ArrayIndexOutOfBoundsExceptione System err println 方法mb catchArrayException捕捉到异常 finally System out println 方法mb catchArrayException的finally语句块 try catch finally结构结束System out println 方法mb catchArrayException运行结束 publicstaticvoidmain Stringargs try mb catchArrayException catch ArithmeticExceptione System err println 方法main捕捉到异常 finally System out println 方法main的finally语句块 try catch finally结构结束System out println 异常处理结束 方法main结束 抛出异常 在该函数中不处理 不执行 执行 捕获异常 2020 4 22 22 classJ ExceptionNewextendsException privatestaticintm number 0 publicJ ExceptionNew m number J ExceptionNew构造方法结束publicStringtoString return 新异常出现 m number 次 方法toString结束 类J ExceptionNew结束 自定义异常例程 publicclassJ ExceptionNewExample publicstaticvoidmain Stringargs try thrownewJ ExceptionNew catch J ExceptionNewe System err println e try catch结构结束 方法main结束 类J ExceptionNewExample结束 调用toString方法 创建异常对象 抛出异常 2020 4 22 23 示例 Importjava util publicclassExceptionDemo publicstaticvoidmain String args Scannerin newScanner System in try System out print 请输入S1的总学时 inttotalTime in nextInt 总学时System out print 请输入S1的课程数目 inttotalCourse in nextInt 课程数目System out println S1各课程的平均学时为 totalTime totalCourse catch InputMismatchExceptione1 System out println 输入不为数字 catch ArithmeticExceptione2 System out println 课程数目不能为零 catch Exceptione System out println 发生错误 e getMessage 输入 270H 在安排catch语句的顺序时 首先应该捕获最特殊的异常 然后再逐渐一般化 即先子类后父类 输出 输入不为数字 进入第一个catch块 输入 2700 输出 课程数目不能为零 进入第二个catch块 2020 4 22 24 本章总体纲要 异常处理递归方法单体 Singleton 程序设计模式 2020 4 22 25 递归 如果在方法定义中直接或间接地调用该方法本身 就称为递归 2020 4 22 26 汉诺塔 TowerofHanoi 问题 有三根柱子 S T和E柱子S上套着n个盘 小盘依次在大盘上面现在要求 每次只能将一根柱子最上面的一个盘移动到另一根柱子上不允许将大盘放在小盘上面只能利用这三根柱子将在柱子S上的n个盘移动到柱子E上 2020 4 22 27 利用递归求解汉诺塔问题的例程 publicclassJ Hanoi publicstaticvoidmb hanoi intn charstart chartemp charend if n 1 System out println 将盘从 start 移到 end else mb hanoi n 1 start end temp System out println 将盘从 start 移到 end mb hanoi n 1 temp start end if else结构结束 方法mb hanoi结束publicstaticvoidmain Stringargs mb hanoi 3 S T E 方法main结束 类J Hanoi结束 J Hanoi java 2020 4 22 28 编译 运行 结果 2020 4 22 29 本章总体纲要 异常处理递归方法单体 Singleton 程序设计模式 2020 4 22 30 单体程序设计模式 要让一个类只能有一个实例对象 2020 4 22 31 单体类实现例程 publicclassJ Singleton privatestaticJ Singletonm object newJ Singleton privateJ Singleton J Singleton构造方法结束 返回单体实例对象的引用publicstaticJ Singletonmb getObject returnm object 方法mb getObject结束 类J Singleton结束 J Singleton java 因为是私有的方法 自行创建这个类的实例对象 2020 4 22 32 使用类J Singleton的实例对象的例程 publicclassJ Example publicstaticvoidmain Stringargs J Singletona J Singleton mb getObject J Singletonb J Singleton mb getObject if a b System out println a和b指向同一个实例对象 elseSystem out println a和b指向不同的实例对象 方法main结束 类J Example结束 J Example java 2020 4 22 33 编译 运行 结果 2020 4 22 34 单体类Runtime publicclassRuntime privatestaticRuntimecurrentRuntime newRuntime publicstaticRuntimegetRuntime returncurrentRuntime Don tletanyoneelseinst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论