最新异常处理 PPT课件PPT课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《最新异常处理 PPT课件PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新异常处理 PPT课件PPT课件.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、异常处理异常处理 PPT PPT课件课件try-catch-finally语句语句,其语法格式:其语法格式:try /可能发生异常的代码可能发生异常的代码 catch(异常类型异常类型1 变量)变量)/异常的处理代码异常的处理代码 catch(异常类型异常类型2 变量)变量)/异常的处理代码异常的处理代码 .finally /总是要执行的代码总是要执行的代码 产生异常语句throw抛出异常异常类结构异常的方法finally机制2具有异常处理的情况具有异常处理的情况class ExceptionDivideBy0 static void method()int x=0,z=10;try int
2、y=10/x;System.out.println(z=+z);catch(ArithmeticException e)System.out.println(ArithmeticException);System.out.println(After try/catch blocks.);public static void main(String args)method();System.out.println(After method.);9ArithmeticExceptionAfter try/catch blocks.After method.10每个异常由类每个异常由类Throwab
3、le或者它的一个子类的实例表或者它的一个子类的实例表示,这样的示,这样的对象可被抛出并能被传递给合适的异常处对象可被抛出并能被传递给合适的异常处理代码处理理代码处理。Throwable类及其子类统称为异常类,类及其子类统称为异常类,每个异常类表示一种异常类型。每个异常类表示一种异常类型。Throwable类是类是Object类的直接子类,其本身又有两类的直接子类,其本身又有两个直接子类:个直接子类:Error与与Exception类。类。RuntimeException类是类是Exception类的直接子类,如类的直接子类,如图图8-1所示。这里,所示。这里,Error类、类、RuntimeE
4、xception类和类和Exception类分别代表某一类异常类型:类分别代表某一类异常类型:8.1 异常分类异常分类11图图8-1 异常类型及其分类异常类型及其分类12(1)Error类及其子类:类及其子类:表示灾难性的、普通程序很表示灾难性的、普通程序很难恢复的异常,例如:难恢复的异常,例如:NoClassDefFoundError(类定义没找到异常):(类定义没找到异常):JVM无法无法找到相应的找到相应的class文件。文件。OutOfMemoryError(内存越界异常):(内存越界异常):JVM没有足够的没有足够的存储空间满足对象创建的要求。存储空间满足对象创建的要求。NoSuch
5、MethodError(调用不存在的方法异常):(调用不存在的方法异常):在改变在改变某个方法的签名后,原先要调用该方法的应用程序,在运行某个方法的签名后,原先要调用该方法的应用程序,在运行时就会抛出该异常。时就会抛出该异常。一般情况下,程序员可不必理会这类异常,它们一般情况下,程序员可不必理会这类异常,它们虽然很严重,但很少发生。虽然很严重,但很少发生。13(2)RuntimeException类及其子类:类及其子类:表示设计或实现表示设计或实现方面的问题,例如:方面的问题,例如:ArithmeticException(算术运算异常):(算术运算异常):算术运算时发生算术运算时发生的异常情况
6、,如整数相除,除数为零。的异常情况,如整数相除,除数为零。ClassCastException(强制类型转换异常):(强制类型转换异常):把一个对象引把一个对象引用转换成一个不合适的类型,如把一个对象引用转换成某个用转换成一个不合适的类型,如把一个对象引用转换成某个子类类型。子类类型。NullPointerException(空引用异常):(空引用异常):需要对象引用时使需要对象引用时使用了一个用了一个null引用。引用。ArrayIndexOutOfBoundsException(数组下标越界异常):(数组下标越界异常):下标值超出了数组大小。下标值超出了数组大小。NumberFormatE
7、xception(数字格式异常):(数字格式异常):试图将非数试图将非数字格式字符串转换成数值。字格式字符串转换成数值。14(3)Exception类及其非类及其非RuntimeException子类子类:表表示示运行时因环境的影响而引发的异常运行时因环境的影响而引发的异常,例如:,例如:IOException(输入输出异常):(输入输出异常):在在I/O操作失败或者被中操作失败或者被中断时引发。其子类包括:断时引发。其子类包括:EOFException、FileNotFoundException、InterruptedIOException等。等。InterruptedException(中
8、断异常):(中断异常):当前等待或睡眠线程当前等待或睡眠线程被其他线程中断时引发。被其他线程中断时引发。这类异常并非因设计或实现引起,是无法避免的。这类异常并非因设计或实现引起,是无法避免的。但一般情况下,但一般情况下,程序员应该提供相应的代码捕捉和处程序员应该提供相应的代码捕捉和处理理。15受检查的异常和不受检查的异常:受检查的异常和不受检查的异常:受检查的异常受检查的异常 Exception类及其非类及其非RuntimeException子类属于受检子类属于受检查的异常;查的异常;受检查的异常要受编译系统的检查受检查的异常要受编译系统的检查。如果一个方法。如果一个方法可能会引发这类异常而又
9、不能适当处理,那么应该用可能会引发这类异常而又不能适当处理,那么应该用throws子句声明抛出;调用者或者用子句声明抛出;调用者或者用try-catch语句捕语句捕捉处理,或者也用捉处理,或者也用throws子句声明抛出,并由它的调子句声明抛出,并由它的调用者处理。用者处理。也就是说,也就是说,对方法中可能会抛出的受检查异常,对方法中可能会抛出的受检查异常,程程序员必须捕捉处理或声明抛出,两者必选其一序员必须捕捉处理或声明抛出,两者必选其一,否则,否则编译系统将给出错误信息。编译系统将给出错误信息。16受检查的异常和不受检查的异常:受检查的异常和不受检查的异常:不受检查的异常:不受检查的异常:
10、类类Error和类和类RuntimeException及其子类属于不受检及其子类属于不受检查的异常,如图查的异常,如图8-1所示。所示。不受检查的异常不受编译系统的检查。对这类异常,不受检查的异常不受编译系统的检查。对这类异常,程序员可以捕捉或声明抛出,但通常可以不加理会。程序员可以捕捉或声明抛出,但通常可以不加理会。17异常类的方法和属性异常类的方法和属性(1)异常类的构造方法异常类的构造方法 public Exception()创建新异常。创建新异常。public Exception(String message)用字符串参数用字符串参数message描述异常信息创建新异常。描述异常信息创
11、建新异常。(2)异常类的方法异常类的方法public String toString()返回描述当前异常对象信息的字返回描述当前异常对象信息的字符串。符串。public String getMessage()返回描述当前异常对象的详细返回描述当前异常对象的详细信息。信息。public void printStackTrace()在屏幕上输出当前异常对象在屏幕上输出当前异常对象使用堆栈的轨迹,即程序中先后调用了哪些方法,使使用堆栈的轨迹,即程序中先后调用了哪些方法,使得运行过程中产生了这个异常对象。得运行过程中产生了这个异常对象。18所谓异常的引发是指因程序运行出现异常情况而产生所谓异常的引发是
12、指因程序运行出现异常情况而产生异常对象、进而转入异常处理过程的情形。异常对象、进而转入异常处理过程的情形。Java运行运行系统在发现异常情况时会自动引发异常。系统在发现异常情况时会自动引发异常。自动引发异常自动引发异常 如下例如下例:8.2 引发异常引发异常19【例【例8-1】在发生异常情况时由运行系统引发异常】在发生异常情况时由运行系统引发异常class Demo public static void main(String args)int a=args.length;System.out.println(a=+a);int b=42/a;int c=1;c4=99;System.out.
13、println(After try/catch blocks.);20throw引发异常引发异常 异常既可以在发生异常情况时由运行系统引发,异常既可以在发生异常情况时由运行系统引发,也可以在程序中也可以在程序中用用throw语句显式引发语句显式引发。格式如下:格式如下:throw new ArithmeticException();21【例【例8-2】下面程序在被减数】下面程序在被减数a小于减数小于减数b时将引发时将引发ArithmeticException异常异常。1)class Test 2)static int method(int a,int b)3)if(a b)4)throw ne
14、w ArithmeticException(a b);/产生异常产生异常5)return a-b;6)7)public static void main(String args)8)method(3,5);9)10)下面是该程序的输出结果:下面是该程序的输出结果:Exception in thread main java.lang.ArithmeticException:a bat Test.method(Test.java:4)at Test.main(Test.java:8)22如果一个方法引发的是受检查的异常且自己没有捕捉,如果一个方法引发的是受检查的异常且自己没有捕捉,那么它必须用那么
15、它必须用throws子句声明抛出;子句声明抛出;该方法的该方法的调用者调用者如果不对异常进行捕捉,那么也必须如果不对异常进行捕捉,那么也必须用用throws子句声明抛出。子句声明抛出。下面是包含下面是包含throws子句的方法定义的语法格式:子句的方法定义的语法格式:()throws .8.3 声明抛出异常声明抛出异常23【例【例8-3】下面程序与例】下面程序与例8-2中的程序基本相同,只是中的程序基本相同,只是method方方法可能抛出的是一个受检查的法可能抛出的是一个受检查的Exception异常,但它既没有捕异常,但它既没有捕捉也没有声明抛出,所以是不能通过编译的。捉也没有声明抛出,所以
16、是不能通过编译的。1)class Test 2)static int method(int a,int b)3)if(a b)4)throw new Exception(a b);5)return a-b;6)7)public static void main(String args)8)int r=method(3,5);9)System.out.println(r=+r);10)11)throws Exception throws Exception 24 对不受检查的异常,同样可以声明抛出(或进行对不受检查的异常,同样可以声明抛出(或进行捕捉),这在语法上是允许的。捕捉),这在语法上是允
17、许的。无论是受检查的异常还是不受检查的异常,对不无论是受检查的异常还是不受检查的异常,对不受检查的异常,不管是否声明了异常抛出,异常一旦受检查的异常,不管是否声明了异常抛出,异常一旦引发,其处理过程是一致的,即:引发,其处理过程是一致的,即:异常沿着方法调用异常沿着方法调用的反方向传播,寻找并转入合适的异常处理代码执行。的反方向传播,寻找并转入合适的异常处理代码执行。如果方法及其所有的调用者都没有提供合适的处理代如果方法及其所有的调用者都没有提供合适的处理代码,那么异常将最终传播到运行系统,运行系统调用码,那么异常将最终传播到运行系统,运行系统调用默认的异常处理代码后终止程序执行。图默认的异常
18、处理代码后终止程序执行。图8-2说明了例说明了例8-2和例和例8-3中异常引发和传递的过程。中异常引发和传递的过程。25图图8-2 异常传播过程示意图异常传播过程示意图26回忆超类和子类中方法覆盖的要求:回忆超类和子类中方法覆盖的要求:1两个方法具有相同的方法签名(即方法名和方两个方法具有相同的方法签名(即方法名和方法的参数完全一致)法的参数完全一致)2返回类型相同返回类型相同3覆盖方法的访问级别不能低于被覆盖方法的访覆盖方法的访问级别不能低于被覆盖方法的访问级别问级别4覆盖方法覆盖方法(子类方法子类方法)不能比被覆盖方法不能比被覆盖方法(超类方超类方法法)抛出更多类型的受检查异常抛出更多类型
19、的受检查异常。下面通过例子加以说明。下面通过例子加以说明。27【例【例8-4】有以下类定义:】有以下类定义:1)import java.io.*;2)3)class TestClass4)void testM(BaseClass o)throws IOException5)o.method();7)8)9)class BaseClass10)void method()throws IOException11).12)28请问下面哪些请问下面哪些BaseClass类的子类定义类的子类定义是合法的?是合法的?A)class A extends BaseClass void method()thro
20、ws IOException B)class B extends BaseClass void method()throws Exception C)class C extends BaseClass void method()throws EOFException,FileNotFoundException 29D)class D extends BaseClass void method()throws IOException,InterruptedException E)class E extends BaseClass void method()F)class F extends Ba
21、seClass void method()throws IOException,NullPointerException 30【例2.10】从键盘输入一个整数和实数,并输出它们的和 import java.io.*;/引入引入java.io包包class InputDemo public static void main(String args)throws IOException /用标准输入用标准输入System.in创建一个创建一个 BufferedReaderBufferedReader br=new BufferedReader(new InputStreamReader(Syste
22、m.in);System.out.print(请输入一个整数:请输入一个整数:);String str=br.readLine();/输入字符行存入字符串输入字符行存入字符串int i=Integer.parseInt(str);/转换字符串为整型数据转换字符串为整型数据31 System.out.print(请输入一个实数:请输入一个实数:);str=br.readLine();float f=Float.parseFloat(str);System.out.print(它们的和是:它们的和是:+(i+f);32 如果不加以捕捉,引发的异常将沿着方法调用的如果不加以捕捉,引发的异常将沿着方法
23、调用的反方向往外抛出和传播,直至反方向往外抛出和传播,直至Java运行系统。通常,运行系统。通常,这并不是所希望的结果。一般来说,引发异常的方法这并不是所希望的结果。一般来说,引发异常的方法的调用者应该捕捉,并根据具体情况处理异常,从而的调用者应该捕捉,并根据具体情况处理异常,从而阻止异常继续往外传播。阻止异常继续往外传播。Java使用使用try-catch-finally语语句来捕捉和处理可能发生的异常,该语句的语法格式句来捕捉和处理可能发生的异常,该语句的语法格式如下:如下:8.4 捕捉异常捕捉异常33try /此处是可能发生异常的代码此处是可能发生异常的代码 catch()/异常的处理代
24、码异常的处理代码 catch()/异常的处理代码异常的处理代码finally/总是要执行的代码总是要执行的代码该语句包含该语句包含try、catch和和finally三个子句。其中,三个子句。其中,catch子句可以有多个,而且子句可以有多个,而且至少有一个至少有一个catch子句或子句或finally子句子句。34try子句包含一段可能要发生异常的代码。一旦发子句包含一段可能要发生异常的代码。一旦发生异常,将由后面的生异常,将由后面的catch子句捕捉处理。每个子句捕捉处理。每个catch子句有一个参数,参数类型指明该子句能够捕捉的异子句有一个参数,参数类型指明该子句能够捕捉的异常类型。如果
25、子句指定的参数类型是所发生的异常的常类型。如果子句指定的参数类型是所发生的异常的类或者是其超类,则说明类或者是其超类,则说明catch子句能够捕捉该异常。子句能够捕捉该异常。此时,运行系统将把异常对象的引用值传递给此时,运行系统将把异常对象的引用值传递给catch子句的参数变量,并将控制流转移到该子句的参数变量,并将控制流转移到该catch子句,子句,执行子句内的异常处理代码。之后,接着执行执行子句内的异常处理代码。之后,接着执行try语语句后面的代码。句后面的代码。如果如果try子句内的代码没有发生任何异常,那么跳子句内的代码没有发生任何异常,那么跳过过catch子句,直接执行子句,直接执行
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新异常处理 PPT课件PPT课件 最新 异常 处理 PPT 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内