JAVA语言与编程第6章异常处理课件_第1页
JAVA语言与编程第6章异常处理课件_第2页
JAVA语言与编程第6章异常处理课件_第3页
JAVA语言与编程第6章异常处理课件_第4页
JAVA语言与编程第6章异常处理课件_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 异常处理第1页,共20页。6.1 异常和异常类 异常(exception)又称例外,是特殊的运行错误对象. Java中定义了很多异常类,每个异常类代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容.每当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的异常类的对象,即产生一个异常.一旦一个异常对象产生了,系统中就有相应的机制来处理它,确保不会产生死机,死循环或其他对os的损害,从而保证了整个程序运行的安全性.第2页,共20页。6.1 异常和异常类(续)6.1.1 异常类结构与组成 Java的所有异常类都是系统类T

2、hrowable的子类,Java中主要异常类层次结构如下图: Throwable类是java.lang包中的一个类,它直接派生了两个子类:Error类和Exception类.Error是与系统或JVM相关的异常,标志着严重的系统错误,是不可恢复的;Exception用于用户程序可能捕获的异常,该类及其子类是一些与用户程序相关的异常,它们也可以用作创建自定义异常类的超类.Exception的一个重要子类RuntimeException,运行时异常,该类型的异常自动为程序定义,包括被零除异常和数组下标越界异常等.第3页,共20页。6.1 异常和异常类(续)1.Exception类的构造函数 pub

3、lic Exception(); public Exception(String s); 其中第二个构造函数可以接收字符串参数传入的信息,该信息通常是对异常的描述.2.Exception类及其子类从Throwable类继承的几个重要的方法:public String getMessage() 该方法返回一个详细描述异常的字符串public void printStackTrace() 该方法没有返回值,它的功能是输出当前异常对象的堆栈使用轨迹,即程序先后调用执行了哪些对象或类的哪些方法,导致运行过程中产生了这个异常对象.public String toString() 该方法返回一个简洁描述该

4、异常的字符串6.1.2 非检查型异常与检查型异常 根据编译器是否对异常做检查,Java的异常分为两类:非检查型异常和检查型异常.在异常的层次结构中,Error及其子类和RuntimeException及其子类都是非检查型异常,它是一种编译器不检查一个方法是否处理或指定向上抛出的异常,它们都是Java运行时系统内发生的异常.第4页,共20页。6.1 异常和异常类(续) 常见的非检查型异常:异 常异常对应的运行错误ArithmeticException算术错误,例如被0除ArrayIndexOutOfBoundsException数组下标越界ClassCastException无效的类型转换Ind

5、exOutOfBoundsException某些类型的下标越界EmptyStackException空栈异常NegativeArraySizeException用负数创建数组NullPointerException使用空引用错误NumberFormatException字符串到数字格式的无效转换StringIndexOutOfBounds尝试在一个字符串边界之外进行索引第5页,共20页。6.1 异常和异常类(续) Exception及其除了RuntimeException以外的所有子类都是检查型异常,它是一种编译器必须检查一个方法是否处理或指定向上抛出的异常,是在Java运行时系统外的代码中发

6、生的异常,如果一个方法没有处理或指定向上抛出可能发生的检查型异常,那么该方法就不能通过编译器的编译.常见的检查型异常如下: 这里只讨论与用户应用程序相关的异常,即Exception分支,它包括所有的检查型异常和运行时异常.异 常异常对应的运行错误ClassNotFoundException未找到欲装载的类CloneNotSupportedException尝试复制一个没有实现Cloneable接口的对象FileNotFoundException未找到指定的文件或目录IllegalAccessException对一个类的访问被拒绝IOException输入、输出错误InterruptedExce

7、ption线程在睡眠、等待或因其他原因暂停时被其他线程打断第6页,共20页。6.2 异常的捕获和处理 Java的异常处理机制可以概括为以下几个过程:(1)在Java程序的执行过程中,如果出现了一个可识别的错误,则会生成一个与该错误相对应的异常类的对象,该异常将被提交给Java运行时系统,这个过程称为抛出异常(2)当Java运行时系统接收到异常对象后,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程成为捕获异常(3)如果Java运行时系统找不到处理异常的程序,那么它将终止程序的执行,最后调用默认异常处理程序来处理异常第7页,共20页。6.2 异常的捕获和处理(续) Java语言提供

8、try-catch-finally语句来捕获并处理一个或多个异常,其一般格式为:try catch()catch()catch()finally 第8页,共20页。6.2 异常的捕获和处理(续) 关于异常处理结构的几点说明:(1)try语句中是一段可能产生异常的代码段,可能抛出一个或多个异常,try指定了catch捕获异常的代码范围(2)catch语句: 1try后通常跟一个或多个catch语句来处理try中异常,若try中没有产 生异常,则catch块不会执行 2catch语句需要一个形式参数:异常类名及其对象,运行时由系统通过 参数值把抛出的异常对象传递给catch语句块,在语句块中对异常

9、做 相应的处理 3处理异常时,通过异常类提供的toString()或getMessage()方法可以 获得有关异常的信息,最常用的是printStackTrace() 4出现异常时,系统根据catch语句的出现顺序对异常类型进行检测,因 此catch语句块的排列顺序应该从特殊到一般(3)finally语句:为程序提供一个统一的出口,通常在该语句块中可以进行资源的清除,如关闭文件等.第9页,共20页。6.2 异常的捕获和处理(续)public class ExceptionFlow public static void main (String args) System.out.println

10、(显示Java异常处理的执行流程) ; System.out.println (即将进入try块) ; try System.out.println (进入了try块!) ; int b=0; int a=3; if (b=0) System.out.println (异常发生!) ; a=a/b; System.out.println (没有异常发生!) ; catch (ArithmeticException e) System.out.println (进入catch块,处理异常!) ; System.out.println (catch块之后!) ; 第10页,共20页。6.2 异常的

11、捕获和处理(续)例:不含catch子句的异常处理public class ExceptionNonCatch public static void main (String strs) System.out.println (RuntimeException non-catch clause test.); int a=5; int b=0; for (int i=1;i=0;i-) try System.out.println (-i=+i+-) ; b=a/i; System.out.println (After no exception occur!) ; finally System.

12、out.println (Finally block!) ; System.out.println (After finally block!) ; 第11页,共20页。6.2 异常的捕获和处理(续)例:捕获被零除异常public class ExceptionWithCatch public static void main (String strs) System.out.println (RuntimeException with catch clause test.) ; int a=5; int b=0; for (int i=1;i=0;i-) try System.out.pri

13、ntln (-i=+i+-) ; b=a/i; System.out.println (After no exception occur!) ; catch (ArithmeticException e) System.out.println (Catch block,i.e.exception handling code.) ; finally System.out.println (Finally block!) ; System.out.println (After finally block!) ; 第12页,共20页。6.2 异常的捕获和处理(续) 从以上两个例子,可以总结出以下几点

14、:不论异常是否发生,finally块总是被执行.当一个异常在本层没有相应的catch处理块时,执行完finally块后,再将这个异常抛出给上层try语句块中异常发生点以后的代码不能被执行当没有catch块处理相应的异常时,默认异常处理程序打印出有关的异常信息并终止程序第13页,共20页。6.3 指定方法抛出异常 在有些情况下,方法暂时还不能确定如何处理异常,它可以将异常进一步向上层抛出,将处理异常的任务留给调用它的方法.如果是检查型异常,抛出异常的方法必须在方法头使用throws子句指定向上抛出的异常,如果是非检查型异常,可以不这么做,但是为了给调用者一个明确的接口,建议也这么做.指定方法抛出

15、异常的格式为: () throws 例:下面的方法头使用了throws子句public void readFile (String file) throws FileNotFoundException FileInputStream f=new FileInputStream (file); /可能产生FileNotFoundException异常/例:ThrowsException.java第14页,共20页。6.3 指定方法抛出异常(续)注:(1)若程序执行时一个检查型异常被抛出,那么要么在当前方法中捕获并抛出,否则必须在方法声明中用throws子句列出所抛出的异常,否则编译无法通过(2)

16、如果是运行时异常可以不捕获它,也可以不在方法头部声明异常.但如果运行时异常要进一步向上抛出的话,建议最好也在throws子句中列出,这样便于方法调用者处理异常;否则,如果调用方法中没有给出异常处理程序,则系统沿着调用堆栈继续向上查找,当找不到匹配的处理程序时,在默认情况下系统将终止程序的执行.第15页,共20页。6.4 抛出异常 抛出异常有两种方法,一种是系统自动抛出异常,另外一种是用throws语句指定在程序中抛出异常.6.4.1 系统自动抛出的异常 所有的系统异常都可以由系统自动抛出,但用户自定义的异常不能由系统自动抛出.例:系统自动抛出异常ArrayIndexOutOfBoundsExc

17、eptionpublic class TestThrowSystemException public static void main (String args ) int a =1,2,3; int i=3; System.out.println (ai) ; /数组下标越界,引发系统抛出异常 Exception in thread main java.lang. ArrayIndexOutOfBoundsException: 3 at TestThrowSystemException.main (TestThrowSystemException.java:5)第16页,共20页。6.4 抛

18、出异常(续)6.4.2 throws语句抛出的异常 在Java中可以使用throw语句指定在程序中抛出某种类型的异常: throw ;注:如果程序企图抛出一个不是throwable或其子类的对象,程序将无法通过编译.而在一般情况下,程序中抛出的应该是Exception或其子类的对象.例:public class TestThrow public static void main (String args )throws ArrayIndexOutOfBoundsException int a =1,2,3; int i=3; if (i2|i0) throw new ArrayIndexOut

19、OfBoundsException (); else System.out.println (ai); 第17页,共20页。6.4 抛出异常(续) 使用throw语句抛出异常应注意的几个问题:(1)一般这种抛出异常的语句应该被定义为在满足一定条件时执行,例如把throw语句放在if分支中.(2)catch后的参数类型(T1)必须和throw后的表达式类型(T2)一致,即或者T1和T2一样,或者T1是T2的父类(3)含有throw语句的方法,应该在方法头中抛出异常,这样做主要是为了通知所有想要调用此方法的方法准备接收和处理在运行过程中可能会抛出的异常例:ThrowExceptionDemo1.java6.4.3 自定义异常类 系统定义的异常用来处理系统可以识别的较常见的运行错误,对于某个应用程序特有的运行错误,则需要编程人员根据程序的特殊逻辑在用户程序中自己创建用户自定义的异常类和异常对象。 Java允许用户自定义异常类,但必须继承现有的异常类。因此第一个自定义异常类必须从系统异常类如Exception,RuntimeException或它们的子类派生,其后定义的异常类可以从系统或自定义的异常类派生。第18页,共20页。6.4 抛出异常(续) cl

温馨提示

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

评论

0/150

提交评论