《异常处理》PPT课件.ppt

上传人:max****ui 文档编号:7184164 上传时间:2020-03-15 格式:PPT 页数:46 大小:664.50KB
返回 下载 相关 举报
《异常处理》PPT课件.ppt_第1页
第1页 / 共46页
《异常处理》PPT课件.ppt_第2页
第2页 / 共46页
《异常处理》PPT课件.ppt_第3页
第3页 / 共46页
点击查看更多>>
资源描述
异常处理 孙聪 课程内容 Java概述面向对象程序设计概念Java语言基础Java面向对象特性Java高级特征常用预定义类的使用 异常处理I O线程GUI程序设计Java网络程序设计高级专题 异常的概念异常处理方法自定义异常类断言 异常的概念异常处理方法自定义异常类断言 异常的概念 在程序运行时 打断正常程序流程的不正常情况分两类错误 Error 应用程序无法捕获的严重问题异常 Exception 应用程序可捕获的一般问题例 试图打开的文件不存在网络连接中断数组越界要加载的类找不到 声明一个字符串数组 通过while循环输出数组中的各字符串1publicclassHelloWorld 2publicstaticvoidmain Stringargs 3inti 0 4Stringgreetings HelloWorld Hello 5 HELLOWORLD 6while i 4 7System out println greetings i 8i System out println end 11 12 HelloWorld Hello HELLOWORLD Exceptioninthread main Java lang ArrayIndexOutOfBoundsExceptionatHelloWorld main HelloWorld java 7 程序运行中出现了异常 导致了程序的非正常终止 产生异常的语句是第7行异常的名称是 数组越界 异常的概念 错误虚拟机相关的问题 如虚拟机崩溃 动态链接失败 低层资源错误等总是不受编译器检查的 Unchecked 可以被抛出 但无法恢复 不可能被捕获异常Runtime异常 由Runtime异常类及其子类表示的异常 如数组越界 算术运算异常 空指针异常等不需要显式声明抛出就能编译通过并被捕获 Unchecked Checked异常 除Runtime异常类及其子类之外的所有异常 如文件不存在 无效URL等未显式声明抛出则无法通过编译 Java的异常类层次 Java的异常类层次 Java lang Throwable是所有异常类的父类检索异常的相关信息输出显示异常发生位置的堆栈追踪轨迹 Java的异常类层次 整数的除0操作导致的异常 如 inti 10 0 Java的异常类层次 对象未实例化时 即试图通过该对象的引用访问其成员变量或方法 如Dated null System out println d toString Java的异常类层次 输入 输出时可能产生的各种异常 Java的异常类层次 异常一般是由程序员的疏忽或者环境的变化所导致的若不对异常进行处理 则会导致程序的不正常终止 为保证程序正常运行 Java提供了异常处理机制 异常的概念异常处理方法自定义异常类断言 异常处理的具体方式 捕获并处理异常将方法中产生的异常抛出 异常处理的具体方式 捕获并处理异常将方法中产生的异常抛出 捕获并处理异常 通过try catch finally语句来实现 基本格式 try 监控区域 一条或多条可能抛出异常的Java语句 catch ExceptionType1e1 异常处理程序 捕获到ExceptionType1类型的异常时执行的代码 catch ExceptionType2e2 异常处理程序 捕获到ExceptionType2类型的异常时执行的代码 finally 执行最终清理的语句 捕获并处理异常 try把可能出现异常的语句都放在try语句块中try语句块之后必须紧跟至少一个catch语句块catch ThrowableTypeobjRef ThrowableType 当前catch语句块能够处理的异常类型 必须是Throwable类的子类objRef 异常处理程序中使用的指向被捕获异常对象的引用 捕获并处理异常 finally当要把除内存之外的资源恢复到初始状态时 需要用finally语句这种需清理的资源包括 已打开的文件或网络连接 在屏幕上画的图形等finally语句块可以省略若finally语句块存在 则无论是否发生异常均执行 示例1 ListOfNumbers 类ListOfNumbers创建一个保存10个Integer对象的向量 并通过 writeList方法将该向量保存到OutFile txt中importjava io importjava util Vector publicclassListOfNumbers privateVectorvt privatestaticfinalintsize 10 publicListOfNumbers 构造方法vt newVector size for inti 0 i size i vt addElement newInteger i publicvoidwriteList PrintWriterout newPrintWriter newFileWriter OutFile txt for inti 0 i size i out println Valueat i vt elementAt i out close publicclassTestListOfNumbers1 publicstaticvoidmain String args ListOfNumberslist newListOfNumbers list writeList 存在没有处理的异常IOException PrintWriterout newPrintWriter newFileWriter OutFile txt 语句中调用了java io FileWriter的构造方法创建文件输出流 该方法的声明如下 publicFileWriter StringfileName throwsIOException 而writeList 方法中没有对FileWriter 方法抛出的IOException进行处理 故程序在编译时产生错误 publicvoidwriteList PrintWriterout null try System out println Enteringtrystatement out newPrintWriter newFileWriter OutFile txt for inti 0 i size i out println Valueat i vt elementAt i catch ArrayIndexOutOfBoundsExceptione System err println CaughtArrayIndexOutOfBoundsException e getMessage catch IOExceptione System err println CaughtIOException e getMessage finally if out null System out println ClosingPrintWriter out close else System out println PrintWriternotopen 更改writeList 方法 执行程序的最后清理操作 关闭程序打开的文件流 示例2 HelloWorld2 java Publicstaticvoidmain Stringargs inti 0 Stringgreetings HelloWorld Hello HELLO while i 4 try System out println greetings i catch ArrayIndexOutOfBoundsExceptione System out println Re settingIndexValue i 1 finally System out println Thisisalwaysprinted i HelloWorld ThisisalwaysprintedHello ThisisalwaysprintedHELLO ThisisalwaysprintedRe settingIndexValueThisisalwaysprinted 多种异常同时处理 可编写针对Exception的任何子类的catch块子类的异常对象可与父类的异常处理程序匹配若catch块针对叶节点 则是专用的异常处理 捕获一种特定的异常若catch块针对中间节点 则是通用的异常处理 捕获该节点及其所有子类表示的异常 异常处理的具体方式 捕获并处理异常将方法中产生的异常抛出 抛出异常 可能产生异常的方法不处理该异常 而是将该异常抛出到调用该方法的程序例 publicvoidtroublesome throwsIOException 声明异常 throws子句 retTypemtdName paralist throws exceptionList 抛出异常 throw语句 throwsomeThrowableObj 执行throw语句后 转向调用者程序 在调用者程序中查找是否有catch子句匹配someThrowableObj若找到则由该catch子句处理 若未找到 则转向上一层调用者程序 若一个异常在转向到main 后还未被处理 则程序将非正常终止 抛出异常 示例 classListOfNumbersDeclared privateVectorvt privatestaticfinalintsize 10 publicListOfNumbersDeclared 构造方法vt newVector size for inti 0 i size i vt add newInteger i 声明抛出异常publicvoidwriteList throwsIOException ArrayIndexOutOfBoundsException PrintWriterout newPrintWriter newFileWriter OutFile txt for inti 0 i size i out println Valueat i vt elementAt i out close 抛出异常 示例 publicclassTestOfDeclared publicstaticvoidmain String args try ListOfNumbersDeclaredlist newListOfNumbersDeclared list writeList catch Exceptione System out println AlistofnumbersiscreatedandstoredinOutFile txt 程序中增加异常处理的优点是什么 设s2语句会引起异常 对于左右两个程序 分别说明s3是否会执行 如果异常被捕获 哪些语句会被执行 如果异常未被捕获 哪些语句会被执行 try s1 s2 s3 catch ExceptionType1e catch ExceptionType2e s5 try s1 s2 s3 catch ExceptionType1e catch ExceptionType2e finally s4 s5 异常的概念异常处理方法自定义异常类断言 自定义异常类 在开发Java程序时 以下情况可能导致需要自定义异常类所需的异常类型在Java标准异常体系中不存在需要将某些实际的异常与Java标准异常相区分使用其它package中定义的异常类会影响当前package的独立性与自包含性 自定义异常类 定义方法自定义异常类是Exception类的子类 可包含普通类的内容通常不将自定义异常类作为RuntimeException类的子类 自定义异常类的定义 描述通信中客户端和服务器连接超时的异常publicclassServerTimeOutExceptionextendsException privateStringreason privateintport publicServerTimeOutException Stringreason intport this reason reason this port port publicStringgetReason returnreason publicintgetPort returnport 自定义异常类的使用 抛出自定义异常PublicvoidconnectMe StringserverName throwsServerTimeOutException intsuccess intportToConnect 80 success open serverName portToConnect if success 1 thrownewServerTimedOutException Couldnotconnect 80 自定义异常类的使用 捕获自定义异常并处理PublicvoidfindServer try connectMe defaultServer catch ServerTimeOutExceptione System out println Servertimedout tryanother try try catch语句块是可以嵌套的connectMe alternateServer catch ServerTimeOutExceptione1 System out println Noserveravaliable 例 TestMyException java 异常的概念异常处理方法自定义异常类断言 断言 Assertion 断言是软件开发中常用的调试方式 很多语言 如C C 等 都支持此机制 但支持方式不尽相同Java中专门提供了assert语句 为Java程序提供一种错误检查机制每个断言都包含一个布尔表达式若程序没有错 则运行assert语句时该表达式的值应该为true如果表达式的值为false 则系统将抛出一个错误 断言的定义 第一种形式assertexpr expr为布尔表达式运行该断言语句时 求出expr的值若值为false 则说明程序处于不正确状态 系统抛出一个没有任何详细信息的AssertionError类型的错误对象 并退出若值为true 则继续执行 断言的定义 第二种形式assertexpr1 expr2 expr1为布尔表达式 expr2为一般表达式运行该断言语句时 求出expr1的值若值为false 则系统计算出expr2的值 并以这个值为参数调用AssertionError类的构造方法 创建一个包含详细信息的AssertionError对象 抛出并退出若值为true 则expr2不被计算 程序继续执行 断言的使用 保证控制流的正确性在if else语句和switch语句中 可在不应被执行的控制流下 使用assertfalse语句 若控制流异常 则会抛出AssersionError publicclassAssertionDemo publicstaticvoidmain String args intmonth 13 switch month case1 System out println January break case2 System out println February break case3 System out println March break case4 System out println April break case5 System out println May break case6 System out println June break case7 System out println July break case8 System out println August break case9 System out println September break case10 System out println October break case11 System out println November break case12 System out println December break default assertfalse Hey that snotavalidmonth break 断言的使用 保证控制流的正确性检查私有方法输入参数的有效性若私有方法对参数有特定的要求 可在方法开始处使用断言进行检查如 若要求输入的参数param1不能为null 则在方法开始处加入断言语句 assertparam1 null paramisnullintest 断言的使用 保证控制流的正确性检查私有方法输入参数的有效性检查方法的返回结果是否有效对一些计算型方法 可通过断言语句 在方法返回前检查返回值是否满足必要的性质如 对于计算绝对值的方法 可在方法中加入下列断言 assertvalue 0 valueshouldbebiggerthan0 value 断言的使用 保证控制流的正确性检查私有方法输入参数的有效性检查方法的返回结果是否有效检查程序不变量程序不变量是程序某个特定点或某些特定点都保持为真的一种特性不变量反映程序的特性 通过分析程序关键点上的不变量 可以监测到程序运行中的异常例如 while x 0 do assertx 0 断言的执行 默认情况下断言是不执行的开启java enableassertionsMyprogram或java eaMyprogram关闭java disableassertionsMyprogram或java daMyprogram若没有Myprogrom则对所有程序开启也可以针对指定的类 包等如 ea ea 等 断言的执行
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!