Java程序设计课件:异常处理_第1页
Java程序设计课件:异常处理_第2页
Java程序设计课件:异常处理_第3页
Java程序设计课件:异常处理_第4页
Java程序设计课件:异常处理_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

异常处理

Java程序设计本章主要内容

异常的概念处理异常自定义异常小结2024/2/4

2/22异常的概念凡是在运行时进入的不正常状态都称为错误。这些错误根据错误的严重性可以分为两类:一类是致命性的错误,它们的出现可能会导致系统崩溃,并且程序员并不能编写程序解决所出现的问题;另一类是普通级的错误,这类错误如果不加控制就会使程序非正常中断,但如果编写代码来处理的话,就有可能避免中断程序的执行。这类错误就为异常(Exception),就是指程序中出现的问题或不常见的情形。2024/2/4

3/22程序中错误的类型语法错误语法错误是由于程序员编写的代码存在语法问题,导致源代码在编译成为字节码过程中产生的错,它由Java语言的编译系统负责监测和报告。运行错误运行错误是在程序执行过程中产生的错误,只有在程序运行时才能发现。这类错误如被0除,数组下标越界,声明了变量或对象引用却不使用等。逻辑错误由于循环条件或选择条件没有写正确导致的错误或由于涉及的程序逻辑有问题而导致的错误。对于这类错误,Java语言的编译系统无法处理,Java也没有相应的处理措施。2024/2/4

4/22JDK中异常类的结构

2024/2/4

5/22Exception类

在Java中,有些异常是Java编译器要求必须处理的,JDK把这些异常的特征和一些通用的处理方法定义成了Exception类及其子类。当程序编译过程中一旦检测出有可能发生这些异常情况,Java的编译系统会自动生成相应的异常类的实例对象,并要求应用程序来处理,如果应用程序中没有它们的处理程序,系统则编译失败并报告异常产生的信息。2024/2/4

6/22常见的Exception类的子类子类名说明AWTException图形界面组件异常。ClassNotFoundException指定类或接口不存在异常。DataFormatException数据格式异常。FontFormatException字体格式异常。IllegalAccessException非法访问异常,如试图访问非公有方法。InstantiationException实例化异常,如实例化抽象类。InterruptedException中断异常。IOException输入输出异常。NoSuchFieldException找不到指定的字段异常。NoSuchMethodException找不到指定方法异常。PrintException打印机错误报告异常。RuntimeException运行时异常。SQLExceptionSQL语句执行错误异常。TimeoutException线程阻塞超时异常。TransformException执行转换算法异常。2024/2/4

7/22常见的RuntimeException类的子类子类名说明ArithmeticException除数为0异常。ArrayIndexOutOfBoundsException访问数组下标越界异常。CalssCaseException类强制转换异常。IllegealArgumentException非法参数异常。IllegalStateException非法或不适当的时间调用方法异常。IndexOutOfBoundsException下标越界异常。MissingResourceException找不到资源异常。NagativeArraySizeException数组长度为负数异常。NullPointerException空指针异常。NumberFormatException数值格式异常。ArrayStoreException由于数组空间不够引起的数组存储异常。EventException事件异常,如果事件的类型不是在调用该方法之前通过初始化该事件指定的事件时抛出。2024/2/4

8/227.2处理异常

在Java中异常被定义为一类对象。当执行程序中的方法发生错误时,Java会根据错误的类型创建一个异常对象并交给运行时系统。抛出异常:我们把创建异常对象并将它交给运行时系统的过程称为抛出异常。捕获异常:我们把选择合适的异常处理方法并将异常传递给它的过程称为异常的捕获异常处理:把执行异常处理程序的过程叫异常的处理。2024/2/4

9/22异常处理的语句try{

可能产生异常的语句;}catch(要捕获的异常类名异常对象名){

异常处理程序;}……finally{

一定会运行的程序;}2024/2/4

10/221.try程序块中在运行时产生异常时,程序运行中断,并抛出相应的异常对象。2.抛出的异常对象如果属于catch括号中要捕获的异常类,则catch会捕获此异常,且为该异常创建一个引用名,然后执行catch程序块中的异常处理程序。其中“……”表示多个catch程序块,每个catch程序块捕获一种异常。3.无论try程序块是否捕获到异常,或者捕获到的异常是否与catch()括号内的异常类型相同,最后一定会运行finally块里的程序代码。4.finally块运行结束后,程序继续运行try-catch-finally块后面的代码。例7.1:异常处理举例importjava.util.Scanner;publicclasseg7_1{ publicstaticvoidmain(String[]args){ inta=0,b,c=0; Scanners=newScanner(System.in); try{ a=9; b=s.nextInt(); c=a/b; }catch(ArithmeticExceptione){ System.out.println("请输入非0值"); b=1; c=a/b; } System.out.println("你好,异常处理完毕!"); System.out.println(c); }}2024/2/4

11/22异常捕获策略尽可能只捕获指定的异常,而不是捕获多个异常的公共父类,除非确信这个异常的所有子类对程序来说是没有差别的,可以同样的方式来处理它们,同时也要考虑该异常将来可能的扩展。只要有可能,就不要捕获java.lang.Exception或java.lang.Throwable。如果有多个指定的异常需要处理,可以多写几个catch代码块,或者捕获多个异常的公共父类,只要不是java.lang.Exception或java.lang.Throwable就行。一般情况下不要捕获RuntimeException或Error,除非这些异常并不代表程序或系统的错误。让这些标志着程序或系统的异常沿着调用栈,一直传递到最上层的严重错误处理程序中。重构代码时,仔细观察因为代码的改变而变得多余的catch代码块。因为编译器并不是总能发现这类问题。2024/2/4

12/22异常的抛出在Java中,一旦软件运行过程出现异常,我们有三种方法来处理它。在发生异常的同时,通过try-catch-finally语句直接处理,这种处理方法被称为程序内部处理;另一种是程序员不对方法程序中产生的异常编写处理程序,仅仅在可能出现异常的方法的方法声明部分添加一个抛出异常的关键字说明这些异常由系统来处理。还有一种是结合系统处理和程序员编程两种方式处理异常。2024/2/4

13/22异常的抛出throws子句要想把方法运行过程中的异常抛出给系统,需要在方法声明中添加throws子句。其方法声明的具体格式如下。一般的,如果一个方法引发了一个异常,而它自己又不处理,就要由其调用方法进行处理。在子类中一个重写的方法可能只抛出父类中声明过的异常或其子类。如果一个方法有完全相同的名称和参数,它只能抛出父类中声明过得异常或者异常的子类。Eg7.32024/2/4

14/22访问权限修饰符

返回值类型

方法名(参数列表)throws异常列表异常的抛出用throw保留字主动抛出异常Java是通过异常抛出语句来实现主动抛出异常功能的。其语句格式是throw异常对象;Eg7.42024/2/4

15/22在使用throw语句抛出异常时需要注意的问题Throwable类的子类所创建的实例对象都可以用throw语句抛出。出异常是为了表明程序遇到错误无法正常执行而需要异常处理。抛出异常的throw语句可以在try代码段中,也可以在try代码段中调用的方法中抛出异常。异常抛出后,它后面的代码将不再执行,也可以说异常地抛出终止了代码段的正常执行。2024/2/4

16/22异常抛出策略从方法使用者的角度,而不是书写该方法的开发者角度来考虑,声明对使用者有意义的异常。

何时抛出异常——在所设计的方法遇到不能处理的非正常情形下,应当声明抛出异常。

不声明所有可能发生的异常,要尽可能的将“低级异常”映射成对使用者有意义的高级异常。不要声明抛出“Exception”或“Throwable”,因为声明抛出“超级异常”对方法使用者来说是毫无用处的,而且会导致极差的代码风格。一般不声明抛出超过3个的异常,如果发生这种情况,也要通过代码重构或将多个异常映射到一个通用异常中来解决该问题,或者在方法内部自行消化部分内部异常。将异常组织成一个对象树结构,有利于保持方法定义的稳定性,同时也给方法的使用者提供了以不同粒度处理异常的自由。2024/2/4

17/227.3自定义异常

我们可以通过从Exception类或者它的子类派生一个子类,作为我们自定义的异常类。

在程序运行时,发生了类似的问题时,程序员可以通过throw语句抛出自定义的异常类的实例,将其放到异常处理的队列中,并激活Java的异常处理机制。2024/2/4

18/22例7.5自定义异常描述不可以输入负数成绩。importjava.util.Scanner;classmyExceptionextendsException{ publicmyException(Stringmsg){ super(msg); }}publicclasseg7_5{ publicstaticvoidmain(String[]args){ doublea;2024/2/4

19/22try{ a=inputScore(); System.out.println(a); }catch(myExceptione){ System.out.println(e.getMessage()); } System.out.println("程序结束"); } staticdoubleinputScore()throwsmyException{ doublescore=0; Scanners=newScanner(System.in); System.out.println("请输入学生成绩!");score=s.nextDouble(); if(score<0){ thrownewmyException("不能传小于0的数"); } returnscore; }}2024/2/4

20/22小结异常处

温馨提示

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

评论

0/150

提交评论