- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
15java异常的捕获
1.5 java异常的捕获
(3课时机上3课时)
目录
第一课时 2
教学目标 2
1.5.1.1 什么是异常 2
1.5.1.2 异常体系结构 3
1.5.1.3 异常处理 3
第二课时 6
教学目标 6
1.5.2.1 自定义异常 6
1.5.2.1.1 步骤一:先扔出第一个异常: 7
1.5.2.1.2 步骤二:接着我们扔出来的异常: 8
1.5.2.1.3 步骤三:回溯异常 8
1.5.2.1.4 异常处理规则 9
第三课时 10
教学目标 10
1.5.3.1 什么是断言 10
1.5.3.2 常见的断言特性 10
1.5.3.3 断言使用方式 10
1.5.3.4 起用断言 11
1.5.3.5 断言的副作用 11
1.5.3.6 何时需要使用断言 12
1.5.3.7 什么地方不要使用断言 12
第一课时
教学目标
异常、java异常处理机制。
1.5.1.1 什么是异常
编译错误compile error:
又称语法错误,是因为错误的使用了语言.由于编译时在程序运行之前进行的,因此编译又称为静态检查.程序设计语言的基本目的之一就是尽可能的在编译期间发现错误。这也是Java 的设计目标之一。同时Java 又支持类的动态加载和多态,这使得许多检查必须在运行时完成。异常就是运行时检查的主角之一(另一个是断言)。
逻辑错误logical error:
又可称为算法错误。无论是编译器,还是异常都不应该也不能检查出此类错误。只有程序员可以检查出。
运行时错误runtime error:
程序在执行时所发生的执行错误。这是异常机制大展拳脚的地方。如数学计算,磁盘空间不足或是文件损坏等。一般这种错误发生时,程序尝试修复或者直接通知用户发生了异常情况。异常就是这个通知。例如:一般的Java 程序都可以看做JVM 的客户,而NullPointerException、OutOfMemoryError 等JDK 中定义的异常,就是JVM 发给Java 程序的异常情况。
1.5.1.2 异常体系结构
图1.5-1 异常体系结构
1)Throwable 所有异常和错误的相关父类
2)有两个直接子类,分别是Error 和Exception
-Error 是指不可恢复的严重问题,不要试图捕获,将直接退出程序
-Exception 是程序设计时,设计不合理,代码错误,Java 认为可以恢复
-Checked 已检查的Java 提供的检查的其他语言没有提供checked 异常。Java认为checked 异常都是可以处理[可以恢复]的异常, 必须处理. 如果不处理,编译的时候会报错(但是大多数异常无法处理,只能抛出,这样降低开发效率使Java被诟病)
-RuntimeException 运行时不检查RuntimeException 是那些可能在Java虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明。--尽量使用,因为更加灵活,无需显式声明
1.5.1.3 异常处理
异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C开始,你也许已经知道如何用if...else...来控制异常了,也许是自发的,然而这种控制异常痛苦,同一个异常或者错误如果多个地方出现,那么你每个地方都要做相同处理,感觉相当的麻烦! Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,所有的异常都可以用一个类型来表示,不同类型的异常对应不同的子类异常(这里的异常包括错误概念),定义异常处理的规范,在1.4版本以后增加了异常链机制,从而便于跟踪异常!这是Java语言设计者的高明之处,也是Java语言中的一个难点,下面是我对Java异常知识的一个总结,也算是资源回收一下。
控制流转移的一个例子:
输出:
可以看到异常会导致控制流的转移,出现异常代码之后的代码不会被执行。
finally关键字。在刚刚的例子的catch 后加入如下代码:
输出:
可以看到,异常抛出时finally 也是被执行的。在finally 中常关闭连接,流(JDBC)
等资源。
注意点:
○try{System.exit(0);} 阻止finally 块执行
○try{return } 不会阻止finally 执行;;
○ 手工抛异常对象throw new Exception( 是否执行finally); 不会阻止finally
继承中的异常问题
如果存在继承关系:
-父类方法声明抛出异常对象
-子类
-1:不声明抛出
-2:声明相同异常信息
-3:父类方法,声明父类异常,子类声明子类异常
(如果方法体内写了super.aMothed(),就必须抛出IOExcept
文档评论(0)