Java语言程序设计-第七章-异常_第1页
Java语言程序设计-第七章-异常_第2页
Java语言程序设计-第七章-异常_第3页
Java语言程序设计-第七章-异常_第4页
Java语言程序设计-第七章-异常_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、Java语言程序设计第七章 异常异常是指程序在执行过程中出现的意外事件。异常通常会使程序的正常流程被打断一般情况下,程序中需要处理异常情况,通过对异常情况的处理,可以使程序的执行流程继续下去,并进行一些异常处理;否则,程序的正常执行流程会被中断 1.异常的基本类型异常处理的第一步是确定异常的类型,常见的异常情况一般分为以下几类:用户输入错误。指用户键盘输入错误,输入格式不对或输入内容不符合程序要求等。例如,用户界面要求输入一个整数,而用户输入了一个字符串,或者要求用户输入一个URL地址,但用户输入的地址语法错误等。设备故障。计算机硬件设备有时也会出故障,例如打印机没连接好,要求的网页没有找到等

2、。物理限制。物理设备本身的限制,例如硬盘已存满,内存已用完等。代码错误。程序员编写的代码出现错误,例如从一个空的堆栈中弹出元素,数组下标为负数等 2 异常处理方法 - if-else形式的异常处理方法用if-else语句(或switch-case语句)可以发现异常并做出相应处理。例如,在程序中要将一个文件整个读入内存,通常的步骤是:(1)打开文件。(2)判断文件的大小。(3)分配内存。(4)将文件读入内存。(5)关闭文件。在上述的过程中可能出现很多问题,例如:(1)文件打不开。(2)不能决定文件的大小(3)内存不能分配(4)读入失败(5)文件不能关闭 上述问题可以用if-else语句方式可以发

3、现异常并做出相应的处理。但是,(1)程序员由于过多地分析程序中异常情况的发生情况,在程序中过多地使用if-else语句,会使程序员正常的程序设计思路受到影响 (2)程序中过多地使用if-else语句,也会影响程序的算法思想的可读性 (3)更为重要的是,有些异常情况是不可预见的。例如计算机的连接中断,打印机纸张用完等。所以,if-else形式不是处理异常的好的方法 2 异常处理方法 - if-else形式的异常处理方法的问题 2 异常处理方法 -Java的异常处理方法Class ReadFiletry 打开文件 关闭文件catch (文件打开失败异常) 处理文件打开失败异常 catch (关闭文

4、件失败异常) 处理关闭文件失败异常 2 异常处理方法 -Java的异常处理方法 -try模块和catch模块在Java语言中,用try模块和catch模块把程序的正常流程代码和异常处理代码分离把程序中可能出现的异常情况都放进了try模块中,而对于各种异常情况,设计了相应的catch模块,这些模块可以用来捕捉这些异常情况,并进行相应的处理。在Java程序中,如果设计人员对可能出现的异常没有设计相应的try模块和catch模块,或设计人员无法预见的异常情况,系统会将出现的异常交由Java虚拟机(JVM)处理,此时Java虚拟机会自动捕捉这些异常情况,并将异常情况在屏幕上显示出来 3 Java的异常

5、类Java语言对大多数常见的异常都定义了异常类。这些异常类可以分为两大类: Error 类和Exception 类Error (错误)类和Exception (异常)类的区别在于:错误指的是系统异常或运行环境出现的异常, 这些异常一般是很严重的异常, 即使捕捉到通常也无法处理,例如Java虚拟机异常。Exception类的异常指的是一般的异常,例如,输入/输出(I/O)异常、数据库访问(SQL)异常等。对这些异常应用程序可以进行处理 3 Java的异常类 -Java异常类的继承关系Throwable类Error类Exception类RuntimeExceptionIllegalAccessEx

6、ceptionClassNotFoundExceptionAWTExceptionIOExceptionInterruptedExceptionException类定义的是较轻的错误,你可以编写代码来处理这类错误,并继续程序的执行。Exception原因:打开的文件不存在。网络连接中断。操作数超过允许范围。想要加载的类文件不存在。试图通过空的引用型变量访问对象。数组下标越界。Error类定义的错误是致命性错误,一般会导致程序停止执行。3 Java的异常类 -Java异常类的继承关系Java虚拟机会抛出Error错误。程序一般不用捕捉Error错误,由系统进行这类错误的捕捉和处理。Error类及

7、其子类定义了系统中大多数这类错误(1)LinkageError类及其子类LinkageError类是Error类的子类。LinkageError(结合错误)类及其子类定义的是一个类依存于另一个类,但在编译前者时后者出现了与前者不兼容情况的各种错误LinkageError类的子类有:ClassFormatError 类格式错误ClassCircularityError 类循环错误NoClassDefFoundError 类定义无法找到错误VerifyError 校验错误AbstractMethodError 抽象方法错误NoSuchFieldError 没有成员变量错误Instantiation

8、Error实例错误3 Java的异常类 - Error类及其子类(2) VirtualMachineErrror类也是是Error类的子类。VirtualMachineErrror(虚拟机错误)类及其子类定义的是系统在虚拟机损坏或需要运行程序的资源耗尽时出现的各种错误VirtualMachineErrror类的子类有:InternalError 内部错误OutOfMemoryError 内存溢出错误StackOverflowError 堆栈溢出错误UnkownError 未知错误 3 Java的异常类 - Error类及其子类Exception类及其子类定义了程序中大多数可以处理的异常Exce

9、ption类的两个子类:RuntimeException 类和 CheckedException 类(1)RuntimeException类及其子类RuntimeException类及其子类定义的是程序执行中可能出现的异常,子类有:ArithmeticException 算术运算异常ArrayStoreException 数组存储异常ArrayIndexOutOfBoundsException 数组下标越界异常CaseCastException 类型转换异常IllegalArgumentException 非法参数异常IllegalThreadStateException 非法线程状态异常Nu

10、mberFormatException 数字格式异常IlegalMonitorStateException 非法监视状态异常IndexOutofBoundsException 下标超出范围异常NegativeArraySizeEXception 负数组个数异常NullPointerException 空指针异常SecurityException 安全异常EmptyStackException 空栈异常NoSuchElementException 没有元素异常 3 Java的异常类 - Exception类及其子类(2)CheckedException 类及其子类定义的是Java程序编译时编译器

11、发现的各种异常CheckedException类的子类有:ClassNotFoundException 类找不到异常CloneNotSupportedException 复制不支持异常IllegalAccessException 非法访问异常InstantiationException 实例异常InterruptedException中断异常IOException 输入/输出异常FileNotFoundException 文件找不到异常InterruptedIOException 中断输入/输出异常 3 Java的异常类 - Exception类及其子类Error类和Exception类的方法

12、基本都是从Throwable类中继承来的Throwable类的构造方法主要有:lThrowable()构造一个对象,其错误信息串为nulllThrowable(String message) 构造一个对象,其错误信息串为messageThrowable类的方法主要有:lString getMessage() 返回对象的错误信息lvoid printStackTrace() 输出对象的跟踪信息到标准错误输出流lvoid printStackTrace(PrintStream s) 输出对象的跟踪信息到输出流slString toString() 返回对象的简短描述信息 3 Java的异常类 -

13、Throwable类的方法4 Java异常处理机制Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常类对象将被提交给Java运行时系统,这个过程成为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。程序员通常只能处理违例(Exception),而对错误(Error)无能为力。java使用的异常处理机制是:在可能出现异常的地方throws(抛出)异常在引用这段代码时捕获异常再处理异常

14、抛出异常捕获异常处理异常4 Java异常处理机制 - Java异常处理的方法异常可以由JVM抛出,也可以手工抛出手工抛出异常用throw关键字把可能出现异常的代码块放在try关键字的块中然后用catch()捕获异常,并处理异常4 Java异常处理机制 - Java异常处理的方法在Java程序中,用try-catch(或try-catch-finally)语句来抛出、捕获和处理异常try-catch-finally语句的语法格式是:try 可能抛出异常的语句模块;catch (异常类型1 )处理异常类型1语句;。catch (异常类型n )处理异常类型n语句;finally无论是否抛出异常都要执

15、行的语句; 4 Java异常处理机制 - Java异常处理的方法下面我们看一个例子,在这个例子中,我们试图将一个非数字字符转变成整型数,这时就发生NumberFormatException异常 。我们把可能出现异常的操作放在trycatch语句中,就可实现相应的操作。try-catch-finally语句的功能为:(1)try模块所有可能抛出异常的语句都放入try模块中。try模块中的语句是程序正常流程要执行的语句,但是在执行过程中有可能出现异常(2)catch模块主要负责对抛出的异常做相应的处理。try模块中的语句可能抛出很多不同类型的异常,所以需要针对不同类型的异常分别设计catch模块,

16、每一模块处理一种类型的异常 对于这些catch模块,其排列的先后顺序有如下规定:出现在前面的catch模块中的异常类一定要是后面的catch模块中的异常类的子类, 这是因为catch模块是按顺序执行的 程序中即使没有try模块,若出现了系统定义的异常,系统也会自动抛出,并由系统负责捕捉和处理(3)finally模块finally模块中的语句是必须执行的语句。无论try模块中是否抛出异常,finally模块中的语句时都要被执行。这个模块是可选的例:没有异常捕捉与处理public class Exception1public static void main(String args) int ar

17、ray1 = new int6;int i=0;for(i=0; ijava Exception1array0=0array1=0array2=0array3=0array4=0array5=0Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 6 at Exception1.main(Exception1.java:7)程序遇到异常,终止执行使用异常捕捉与处理public class Exception1public static void main(String args) int array1 = new

18、int6;int i=0;try for(i=0; ijava Exception1array0=0array1=0array2=0array3=0array4=0array5=0Exception has been captured!java.lang.ArrayIndexOutOfBoundsException: 6 at Exception1.main(Exception1.java:7)Exception test end.程序捕捉到异常并进行处理,程序顺利执行完毕使用finally关键字使用场合:无论是否发生异常,都需要执行一段特定的代码时,尤其是一些善后工作。例如文件关闭,资源释放

19、等。即使在trycatch中使用了return语句,finally中的语句也会被执行使用finally关键字举例1public static void main(String args) int array1 = new int6;int i=0;try for(i=0; ijava Exception1array0=0array1=0array2=0array3=0Finally .Exception test end.使用finally关键字举例2public static void main(String args) int array1 = new int6;int i=0;try f

20、or(i=0; ijava Exception1array0=0array1=0array2=0array3=0array4=0array5=0Exception has been captured!Finally .Exception test end.使用finally关键字举例3public static void main(String args) int array1 = new int6;int i=0;try for(i=0; ijava Exception1array0=0array1=0array2=0array3=0array4=0array5=0Exception has

21、 been captured!Finally .finally示例结论无论是否捕捉到异常,都要执行finally中的语句即使在trycatch中使用了return语句,finally中的语句也会执行6.3.4 抛出异常用户可以在程序中人为地抛出一个异常,用来处理某种特殊的情况。使用关键字throw抛出的异常必须是java.lang.Throwable类的一个对象实例抛出异常的方法直接抛出:异常的抛出与处理在同一个方法的内部间接抛出:异常的抛出与处理在不同的方法中,一般是调用者捕捉被调用者所抛出的异常直接抛出异常protected void DirectThrow()try.throw new IOException(); /抛出异常catch(IOException e)/捕捉并处理异常间接抛出异常protected void IndirectThrow()tryDoRead();catch(IOException e)/捕捉并处理异常;protected void DoRead() throws

温馨提示

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

评论

0/150

提交评论