JAVA教程(程序异常处理).ppt_第1页
JAVA教程(程序异常处理).ppt_第2页
JAVA教程(程序异常处理).ppt_第3页
JAVA教程(程序异常处理).ppt_第4页
JAVA教程(程序异常处理).ppt_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

程序异常处理 本章提要 异常的概念 异常处理机制 throw和throws的使用 引子 在调试航班信息录入程序时 可能会遇到这样的情况 应用程序运行过程中 突然中止 屏幕上出现一大堆英文 让人不知所措 在许多城市 银行ATM机随处可见 取款非常方便 在ATM机上取款必须按照一定的步骤操作 若操作出错 会相应的提示信息 指导你下一步地操作 比如密码输入错误 ATM机将会显示 密码输入错误 请重新输入 的消息 如果三次密码输入都有误 则吞卡没商量 无论什么原因引起的程序运行不正常 都认为是程序出现了异常 知识要点 异常的概念常见的异常情况异常处理的机制利用try catch finally实现异常处理利用throw throws创建用户自定义异常 知识学习 异常概念 异常 Java把程序运行中可能遇到的错误分为两类 一类是非致命的 通过某种修正后程序还能继续执行 这类错误称为异常 这是一类特殊的运行错误对象 另一类是致命的 即程序遇到了非常严重的不正常状态 不能简单地恢复执行 这就是错误 即异常类基类throwable派生出两个子类 Error类 定义了Java程序运行时出现了灾难性失败的异常 一般来说java程序不捕获也不抛出类Error的对象 包括动态链接失败 虚拟机错误等 而只处理Exception类的各子类对象 Exception类 定义了程序可以捕捉到的异常 异常分两类 1 系统定义的2 用户定义的 异常处理 对于异常 Java使用一种错误捕获方法进行处理 称为异常处理 处理异常的两种方式一是将异常交由Java异常处理机制的预设处理方法来处理 二是利用Java提供的try catch finally语句对于可能出现的异常作预先处理 知识学习 异常概念 Exception类定义了程序可捕捉的异常 Exception类派生了两个子类 RuntimeException和IOException RuntimeException类的异常一般是编程原因 如 1 一个错误的类型转换 NumberFormatException 2 一个数组越界访问 ArrayIndexOutOfBoundsException 3 一个空指针访问 NullPointerException 4 一个除以零的算术操作 ArithmeticException IOException类的异常原因主要一些意外情况的出现 如 1 试图读文件结尾后的数据 EOFException 2 试图打开一个错误的URL UnknownHostException 3 试图根据一个根本不存在的类的字符串来找一个Class对象 ClassNotFoundException 知识学习 程序运行的错误类型及位置 知识学习 程序运行的错误类型及位置 ArithmeticException算术异常整数除法中 如果除数为0 则发生该类异常 Java虚拟机遇到这样的错误时会中止程序的执行流程 并新建一个ArithmeticException类的对象 即抛出一个算术运算异常 例如下面的程序将引发ArithmeticException异常 publicclassTestArithmeticException publicstaticvoidmain Stringargs intdenominator 0 numerator 20 result 0 result numerator denominator 除数为0 将引发ArithmeticException异常System out println result NullPointerException异常发生的原因 通常是由于应用程序企图在某个需要的对象上使用null值 1 使用未分配内存的对象2 调用未分配内存对象的方法3 访问或修改未分配内存对象的属性4 使用长度为null的数组如 imageim newimage 4 System out println im 0 toString 第一行创建了4个元素的数组im 每个元素都是image类型的 系统为其进行初始化 每个元素中的值为null 表明它还没有指向任何实例 第二行要访问im 0 由于访问的是还没有进行实例化的空引用 因此导致NullPointerException异常 知识学习 程序运行的错误类型及位置 NegativeArraySizeException数组元素个数为负异常 按常规 数组元素的个数应是一个大于等于0的整数 不应该是一个负数 创建数组时 如果元素个数是个负数 则会引发NegativeArraySizeException异常 ArrayIndexOutOfBoundsException数组下标越界异常java把数组看作是对象 并用length变量记录数组的大小 访问数组元素时 运行时环境根据length值自动检查下标的大小 如果数组下标越界 则将导致ArrayIndexOutOfBoundsException异常 异常处理关键字try catch和finally当发生异常时 要进行异常处理 Java语言提供了异常处理机制 用于专门处理异常 一般地 当发生异常时 程序中断执行 并输出一条信息 Java中对于可能抛出异常的代码段 要使用try语句括住 用catch语句指明要捕获的异常及相应的处理代码 try catch和finally语法 Try 此处为抛出具体异常的代码 catch 抛出异常时要执行的代码 finally 必须执行的代码 知识学习 捕获和处理异常的机制 异常处理过程 例子 本例没有捕获异常 程序将在发生异常处终止 并由缺省处理程序输出错误信息 1 packageex publicclassFrame1 publicFrame1 intd 0 inta 10 d 被0除 产生异常System out println neverrunthissentence 此语句将不被执行 publicstaticvoidmain String args Frame1frame1 newFrame1 例子 本例捕获了异常 同时很好地说明了try catch finally 各块之间的处理关系 2 packageex publicclassException2 intcount 1 publicException2 while true try intx 6 count System out println intry noexception catch ArithmeticExceptione System out println incatch dividedbyzero finally System out println infinally if count 1 break whileSystem out println endofprogram publicstaticvoidmain String args Exception2exception2 newException2 执行main方法 生成exception对象 调用构造方法 执行构造方法中while的循环 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行finally块 输出infinally count不为 1 继续执行循环 执行finally块 输出infinally count为 1 终止while循环 输出endofprogram 执行main方法 生成exception对象 调用构造方法 执行main方法 生成exception对象 调用构造方法 执行main方法 生成exception对象 调用构造方法 执行main方法 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行finally块 输出infinally count不为 1 继续执行循环 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行finally块 输出infinally count不为 1 继续执行循环 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 输出endofprogram 执行finally块 输出infinally count不为 1 继续执行循环 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行finally块 输出infinally count为 1 终止while循环 输出endofprogram 执行finally块 输出infinally count不为 1 继续执行循环 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 执行finally块 输出infinally count为 1 终止while循环 输出endofprogram 执行finally块 输出infinally count不为 1 继续执行循环 执行x 6 0及count count 1 1 此时引发异常ArithmeticException 中断当前代码的执行 查找匹配的catch 输出incatch dividedbyzero 执行x 6 1及count count 1 0 此时不引发异常输出inttiy noexception 执行构造方法中while的循环 生成exception对象 调用构造方法 执行main方法 输出endofprogram 例子 本例说明了是否执行try语句中finally后面的代码段的情况 3 packageex importjava io InputStream importjava io BufferedInputStream importjava io InterruptedIOException importjava io 定义的两个异常类 当输入一个空串时的异常类classEmptyStringExceptionextendsException 当字符串中含有数字时的异常类classIncludeNumberExceptionextendsException publicclassExceptionExample publicstaticvoidmain String args BufferedReaderin newBufferedReader newInputStreamReader System in System out println Pleaseinput Stringstr try str in readLine 从键盘读入一行信息 读入空串 则抛出EmptyStringException 异常if str length 0 thrownewEmptyStringException for inti 0 i 0 thrownewIncludeNumberException catch EmptyStringExceptione 空串的处理 System out println EmptyStringException catch IncludeNumberExceptione 含数字时的处理 System out println IncludeNumberException catch IOExceptione 其他输入异常的处理 System out println IoException finally System out println Exceptionexampleend 如果我们修改保护代码段 增加一条退出语句 如下所示 try str in readLine if str length 0 thrownewEmptyStringException for inti 0 i 0 thrownewIncludeNumberException System exit 0 当读入的内容不抛出异常时 将执行System exit 0 语句 从程序中退出 此时不会输出Exceptionexampleend信息 但当抛出异常时 程序转去处理异常 这样就会绕过System exit 0 语句 根据异常的类型执行不同的操作 并在最后输出Exceptionexampleend信息 由于Java的异常类对于某些特殊情况进行约束 如航空售票系统 12岁以上的乘客必须购买全票 此时可使用关键字throw和throws 根据需要创建自定义异常类 处理程序应用需要的约束 保证程序中数据的完整性 throw语句的语法如下 throwthrows语句用于声明一个方法可能引发的所有异常 这些异常要求调用该方法的程序进行处理 其语法如下 type 参数表 throws异常类型表 方法体 知识学习 自定义异常 例1 throw语句 importjava awt importjava awt event importjava applet importjavax swing publicclassThrowDemoextendsJApplet JTextFieldtf1 newJTextField trytousethrow JTextFieldtf2 newJTextField thiswillnotonthescreen publicvoidinit try Containercp newContainer cp this getContentPane cp setLayout newBorderLayout cp add tf1 BorderLayout NORTH demo cp add tf2 知识学习 应用自定义异常 catch NullPointerExceptione 捕获demo 抛出的NullPointerExceptiontf1 setText catchanexception e privatevoiddemo thrownewNullPointerException thisexceptionisthrowbyinit 本例中demo 人为地抛出一个异常 所以cp add tf2 将不再被执行 案例MyExceptionTest java 执行init 方法 继续执行init 中的本try块之外的其他语句 此处无其他语句需执行 所以程序终止并退出 执行init 方法 例2 throws语句 packageex importjava awt importjava awt event importjava applet importjavax swing publicclassThrowsDemoextendsJApplet Initializetheappletpublicvoidinit try f catch Exceptione e printStackTrace voidf throwsException thrownew

温馨提示

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

评论

0/150

提交评论