java应用基础  第五章 异常处理_第1页
java应用基础  第五章 异常处理_第2页
java应用基础  第五章 异常处理_第3页
java应用基础  第五章 异常处理_第4页
java应用基础  第五章 异常处理_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第 6章 异常处理下一页上一页返回开始java中的异常处理 2主要内容n Case:TryCatchDemo.javan 6.1 异常处理概述n 什么是异常n 为何采用异常处理n 6.2 异常的分类与层次n 6.3 异常的处理机制n 对异常处理的进一步讨论n 作业下一页上一页返回开始java中的异常处理 36.1 异常处理概述n 6.1.1 什么是异常n 异常异常 就是在程序的运行过程中所发生的意外事件,它中断指令的正常执行。n Java中提供了一种独特的处理异常的机制,通过异常来处理程序设计中出现的错误。n 异常 错误下一页上一页返回开始java中的异常处理 46.1 异常处理概述n 认识认识 Java中的错误中的错误n 语法错误n 运行错误n 逻辑错误下一页上一页返回开始java中的异常处理 56.1 异常处理概述n 认识认识 Java中的错误中的错误n 语法错误: 由代码结构中的问题引起如:拼错关键字,丢掉标点符号等。public class ShowSyntexErrospublic static void main(String args)i=30;System.out.print(i+4);下一页上一页返回开始java中的异常处理 66.1 异常处理概述n 认识认识 Java中的错误中的错误n 运行错误: 引起程序非正常中断的错误如:输入错误,除零等。public class ShowRuntimeErrospublic static void main(String args)int i=1/0;下一页上一页返回开始java中的异常处理 76.1 异常处理概述n 认识认识 Java中的错误中的错误n 逻辑错误: 程序没有按照期望的要求执行原因多种多样。public class ShowLogicErrospublic static void main(String args)int number1=3;int number2=3;number2+=number1+number2;System.out.println(“number2 is ”+number2);下一页上一页返回开始java中的异常处理 86.1 异常处理概述n 认识认识 Java中的错误中的错误n 语法错误 : 编译器指出错误的位置和原因n 运行错误 : JVM定位错误n 逻辑错误 : 调试下一页上一页返回开始java中的异常处理 96.1.2 为何使用意外处理:把出错处理和正常代码分开。比如有程序是处理文件,大家看流程,这个流程中充满了错误可能。readFile 打开文件;打不开咋办?判断大小 ; 大小判断失败怎么办?(磁带)分配内存 ; 内存不够读入内存 ; 文件读不出来关掉文件 ; 文件关不掉。 解决方法:写大量的 if语句。下一页上一页返回开始java中的异常处理 10传统的错误检测和纠正errorCodeType readFile initialize errorCode = 0; 打开文件 ;if (打开文件成功 ) 判断文件长if (文件长取到 ) 分配内存 if (分内存成功 ) 读入内存if (读文件失败 ) errorCode = -1; /读文件判断 else errorCode = -2; /分配内存失败 else errorCode = -3; /取不到文件长 关闭文件 ;if (文件没关 else errorCode = errorCode and -4; else errorCode = -5; return errorCode;下一页上一页返回开始java中的异常处理 11n 从上面的流程可看出真正有用的代码不多,就五条而已,其它全部是判断错误用的,主要逻辑都被错误处理代码混得看不清了,程序可读性差,出错返回信息量太少。n 在 Java中,处理这种情况的方法是利用异常处理,把出错处理和正常代码分开, Java异常处理通过 5个关键字try,catch,finally,throw和 throws进行管理。 下一页上一页返回开始java中的异常处理 12Java的解决方式readFile /结构清楚,无需自己判断,代码量小。try 打开文件; 判断大小 ; 分配内存 ; 读入内存 ; 关掉文件 ; catch (文件打开失败 ) 处理代码; catch (大小取不到失败 ) 处理代码 ; catch (内存分配失败 ) 处理代码 ; catch (读取失败 ) 处理代码 ; catch (文件关闭失败 ) 处理代码 ; 下一页上一页返回开始java中的异常处理 136.2 异常类的分类与层次n 6.2.1 异常类的层次结构n 在 jdk中,每个包中都定义了异常类,而所有的异常类都直接或间接地继承于 java.lang.Throwable类。当 Java程序遇到不可预料的错误时,会实例化一个从 Throwable类继承的对象。 n java中的异常类可分为两大类:n Error: 错误 Error类指的是系统错误或运行环境出现的错误,这些错误一般是很严重的错误,即使捕捉到也无法处理,由 Java虚拟机生成并抛出,包括系统崩溃、动态链接失败、虚拟机错误等,在 Java程序中不做处理。 n Exception: 异常 Exception类则是指一些可以被捕获且可能恢复的异常情况,是一般程序中可预知的问题。对于异常可分为两类:n (1) 运行时异常:程序中可以不做处理,直接由运行时系统来处理。n (2) 非运行时异常:在程序中必须对其进行处理,否则编译器会指出错误。 下一页上一页返回开始java中的异常处理 14异常类的结构层次 下一页上一页返回开始java中的异常处理 156.2.2 Exception类n 1. Exception类的构造方法n Exception类有两种构造方法:n Exception():没有指定的消息串,直接构造一个 Exception。n Exception(String exp):根据参数提供的消息串,创建一个 Exception。n 例如,创建一个异常对象:n Exception myExp=new Exception(“异常!”);下一页上一页返回开始java中的异常处理 16n 2. 常用方法n Exception类的方法均继承自 Throwable类,可以为程序提供一些有关异常的信息,常用方法如下:n String getMessage() :返回该异常所存储的描述性字符串。n String toString():返回异常对象的详细信息,包含该类名和指出所发生问题的描述性消息的字符串。n void printStackTrace():将异常发生的路径,即引起异常的方法调用嵌套序列打印到标准错误流。n 例如:n System.out.println(myExp.getMessage();n 此语句可以将异常对象 myExp的异常信息描述打印输出,在屏幕上显示 “异常! ”。 下一页上一页返回开始java中的异常处理 176.2.3 自定义异常类n 在程序中,可以创建自定义的异常类。用户自定义的异常类都要直接或间接地继承 Exception类。可按照下面的方法自定义一个异常类:n (1) 创建一个继承 Exception类或者其它已存在的异常类的子类。n (2) 在该类中创建一个默认的无参数构造方法,该构造方法以适当的错误消息作为输入,调用它的超类的构造方法。n (3) 再增加一个带字符串参数的构造方法,该构造方法以适当的错误消息作为输入(还包括输入的字符串)来调用其超类相应的构造方法。 下一页上一页返回开始java中的异常处理 18n 例如,定义一个继承于 Exception类的用户自定义异常类,语句如下:class MyException extends ExceptionMyException() super(“数据错误! ”);MyException(String exp)super(exp);下一页上一页返回开始java中的异常处理 196.3 异常的处理机制n 每当 Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。一旦一个异常对象产生了,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,从而保证了整个程序运行的安全性。这就是 Java的异常处理机制。 下一页上一页返回开始java中的异常处理 20n Java中处理异常有两种方式:捕获异常、声明抛弃异常。n 捕获异常 ,就地解决,并使程序继续执行。n 声明抛出异常 也就是将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。下一页上一页返回开始java中的异常处理 216.3.1 捕获异常n 当 Java运行时系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获 (catch)异常。这是积极的异常处理机制。如果 Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的 Java程序也将退出。 下一页上一页返回开始java中的异常处理 22捕获异常是通过 try-catch-finally语句实现的。n 处理异常的程序结构如下:try/接受监视的程序块 ,在此区域内发生的异常 ,由 catch中指定的程序处理catch(要处理的异常种类和标识符 )/处理异常catch(要处理的异常种类和标识符 )/处理异常finally/最终处理下一页上一页返回开始java中的异常处理 23try-catch-finally语句n 1. tryn 捕获异常的第一步是用 try 选定捕获异常的范围,所有可能抛出异常的语句都放入 try模块中。n try模块中的语句是程序正常流程要执行的语句,但是在执行过程中有可能出现异常。n 2. catch(必有 )n 每个 try代码块可以伴随一个或多个 catch语句,用于处理 try代码块中所生成的异常事件。 catch语句只需要一个形式参数指明它所能够捕获的异常类型 ,这个类必须是Throwable的子类 ,运行时系统通过参数值把被抛弃的异常对象传递给 catch块。下一页上一页返回开始java中的异常处理 24try-catch-finally语句n 在 catch块中是对异常对象进行处理的代码,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。getMessage( )是类 Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。n 例如:下一页上一页返回开始java中的异常处理 25try-catch-finally语句n trycatch( FileNotFoundException e )System.out.println( “message: “+e.getMessage() );e.printStackTrace( System.out );catch( IOException e )System.out.println(e.getMessage() );下一页上一页返回开始java中的异常处理 26try-catch-finally语句n catch 语句的顺序:捕获异常的顺序和 catch语句的顺序有关,当捕获到一个异常时,剩下的 catch语句就不再进行匹配。因此,在安排 catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。下一页上一页返回开始java中的异常处理 27try-catch-finally语句n 3.finally( 可选)捕获异常的最后一步是通过 finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在 try代码块中是否发生了异常事件, finally块中的语句都会被执行。Case:例 6.1 TryCatchSequence.java下一页上一页返回开始java中的异常处理 286.3.2 声明抛出异常n 1. 抛出异常n 在 Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给 Java运行时系统,这一异常的产生和提交过程称为抛弃 (throw)异常。 n 2. 声明抛弃异常n 如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃( throws) 异常。这是一种消极的异常处理机制。下一页上一页返回开始java中的异常处理 291. 抛出异

温馨提示

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

评论

0/150

提交评论