《Java第五章异常处理.ppt》由会员分享,可在线阅读,更多相关《Java第五章异常处理.ppt(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java程序设计程序设计异常处理异常处理内容内容异常处理的基础知识异常处理的基础知识异常对象的抛出异常对象的抛出异常对象的捕获异常对象的捕获异常的分类异常的分类throw和和throws自定义异常自定义异常5.1 为什么设计异常处理机制为什么设计异常处理机制 考虑如下读文件程序考虑如下读文件程序class ReadFile public static void main(Sstring args)打开文件打开文件;/可能失败可能失败 确定文件大小确定文件大小;分配内存分配内存;读入文件读入文件;/可能失败可能失败 关闭文件关闭文件;/可能失败可能失败 问题:未对失败进行处理问题:未对失败进行处
2、理问题:未对失败进行处理问题:未对失败进行处理改进:对失败进行处理改进:对失败进行处理改进:对失败进行处理改进:对失败进行处理仍然存在的缺点仍然存在的缺点仍然存在的缺点仍然存在的缺点:n n模糊了问题求解的逻辑模糊了问题求解的逻辑模糊了问题求解的逻辑模糊了问题求解的逻辑n n语言本身对程序员无约束语言本身对程序员无约束语言本身对程序员无约束语言本身对程序员无约束n n层层处理的麻烦层层处理的麻烦层层处理的麻烦层层处理的麻烦class ReadFile public static void main(string args)打开文件打开文件;/可能失败可能失败 if(失败失败)失败处理失败处理1
3、 确定文件大小确定文件大小;分配内存分配内存;读入文件读入文件;/可能失败可能失败 if(失败失败)失败处理失败处理2 关闭文件关闭文件;/可能失败可能失败 if(失败失败)失败处理失败处理3 Java中对失败进行处理中对失败进行处理class ReadFile public static void main(string args)try 打开文件打开文件;/可能失败可能失败 确定文件大小确定文件大小;分配内存分配内存;读入文件读入文件;/可能失败可能失败 关闭文件;关闭文件;/可能失败可能失败 catch(打开文件失败打开文件失败)失败处理失败处理 catch(读文件失败读文件失败)失败处
4、理失败处理 catch(关闭文件失败关闭文件失败)失败处理失败处理 5.2 异常对象的抛出异常对象的抛出抛出异常:抛出异常:抛出异常:抛出异常:当程序发生异常时,产生一个当程序发生异常时,产生一个当程序发生异常时,产生一个当程序发生异常时,产生一个异常事件异常事件异常事件异常事件,JavaJavaJavaJava系统自动产生一个系统自动产生一个系统自动产生一个系统自动产生一个异常对象异常对象异常对象异常对象,然后将这个对象传递给,然后将这个对象传递给,然后将这个对象传递给,然后将这个对象传递给JavaJavaJavaJava运行时系统,这个例外产生和提交的过程称为运行时系统,这个例外产生和提交
5、的过程称为运行时系统,这个例外产生和提交的过程称为运行时系统,这个例外产生和提交的过程称为抛出抛出抛出抛出(throw)(throw)(throw)(throw)异常异常异常异常;public class Try1 public static void main(String args)int i=0;int a=5,6,7,8;for(i=0;i=4;i+)(a+i+=+ai);System.out.print(“this will not be outputed);:4at Try1.main(Try1.java:6)5.3 异常对象的捕捉异常对象的捕捉捕获异常:当捕获异常:当JavaJa
6、va运行时系统得到异常对运行时系统得到异常对象后,它将会寻找处理这一例外的代码,象后,它将会寻找处理这一例外的代码,找到能处理这一异常的方法后,运行时系找到能处理这一异常的方法后,运行时系统把当前异常对象交给该方法进行处理,统把当前异常对象交给该方法进行处理,该过程称为该过程称为捕获捕获(catch)(catch)异常异常。5.3.1 try,catch,finally语语法格式法格式try 代码代码0(含抛出异常的方法调用含抛出异常的方法调用)catch(异常类异常类1 e)异常处理代码异常处理代码1catch(异常类异常类n e)异常处理代码异常处理代码nfinally 必须执行的代码必须
7、执行的代码后续代码后续代码1)执行执行代码代码0;2)在执行在执行代码代码0的过程的过程中中,若无异常类的对象抛若无异常类的对象抛出出,则执行则执行finally后后必须必须执行的代码执行的代码,3)若有若有异常类异常类i的对象的对象抛出抛出,则执行则执行异常处理异常处理代码代码i,并执行并执行finally后后必须执行的代码必须执行的代码.4)执行后续代码执行后续代码.5.3.2 try,catch,finally示例示例(1)ExcDemo1.java运行结果运行结果注意注意:n n有可能产生异常的代码放到有可能产生异常的代码放到有可能产生异常的代码放到有可能产生异常的代码放到trytry
8、语句块中语句块中语句块中语句块中 n n抛出异常后,抛出异常后,抛出异常后,抛出异常后,trytry语句块中抛出异常的语句之后语句块中抛出异常的语句之后语句块中抛出异常的语句之后语句块中抛出异常的语句之后的代码不被执行,程序的执行流程转向到捕获的代码不被执行,程序的执行流程转向到捕获的代码不被执行,程序的执行流程转向到捕获的代码不被执行,程序的执行流程转向到捕获到该异常的到该异常的到该异常的到该异常的catchcatch语句块中。语句块中。语句块中。语句块中。异常产生之前异常产生之前数组下标越界数组下标越界在在catch语句之后语句之后5.3.3 try,catch,finally示例示例(2
9、)若一个方法抛出异常,但在该方法内没有捕获异若一个方法抛出异常,但在该方法内没有捕获异若一个方法抛出异常,但在该方法内没有捕获异若一个方法抛出异常,但在该方法内没有捕获异常,则该异常将沿此方法的调用路径反向向上传常,则该异常将沿此方法的调用路径反向向上传常,则该异常将沿此方法的调用路径反向向上传常,则该异常将沿此方法的调用路径反向向上传递,直到该异常被捕获,否则,该异常将传递给递,直到该异常被捕获,否则,该异常将传递给递,直到该异常被捕获,否则,该异常将传递给递,直到该异常被捕获,否则,该异常将传递给JavaJava运行系统(运行系统(运行系统(运行系统(JavaJava运行系统将终止程序的执
10、行,运行系统将终止程序的执行,运行系统将终止程序的执行,运行系统将终止程序的执行,并打印错误提示)。并打印错误提示)。并打印错误提示)。并打印错误提示)。n n示例:示例:示例:示例:n n示例:示例:示例:示例:待捕获异常的类型须与抛出异常的类型相匹配,待捕获异常的类型须与抛出异常的类型相匹配,待捕获异常的类型须与抛出异常的类型相匹配,待捕获异常的类型须与抛出异常的类型相匹配,程序的执行流程不会转向到不匹配的程序的执行流程不会转向到不匹配的程序的执行流程不会转向到不匹配的程序的执行流程不会转向到不匹配的catchcatch语句块语句块语句块语句块中。中。中。中。n n示例:示例:示例:示例:
11、5.4 异常的分类异常的分类ErrorError:内存溢出,栈溢出等,程序无法捕捉,由系统处理。内存溢出,栈溢出等,程序无法捕捉,由系统处理。内存溢出,栈溢出等,程序无法捕捉,由系统处理。内存溢出,栈溢出等,程序无法捕捉,由系统处理。Runtime ExceptionRuntime Exception:设计不当造成的问题设计不当造成的问题设计不当造成的问题设计不当造成的问题,本可避免的本可避免的本可避免的本可避免的错误,如数组出界、除零错误等。这种异常错误,如数组出界、除零错误等。这种异常错误,如数组出界、除零错误等。这种异常错误,如数组出界、除零错误等。这种异常javajava不强制要不强制
12、要不强制要不强制要求捕捉。求捕捉。求捕捉。求捕捉。其他其他其他其他:程序无法预料由环境因素引发的异常,如文件没找:程序无法预料由环境因素引发的异常,如文件没找:程序无法预料由环境因素引发的异常,如文件没找:程序无法预料由环境因素引发的异常,如文件没找到、输入输出错误、到、输入输出错误、到、输入输出错误、到、输入输出错误、URLURL格式不正常等。格式不正常等。格式不正常等。格式不正常等。JavaJava要求捕捉。要求捕捉。要求捕捉。要求捕捉。5.4.1 常见异常常见异常Runtime ExceptionArithmeticException:算术除零异常算术除零异常NullPointerExc
13、eption:空指针异常空指针异常ArrayIndexOutOfBoundsExceptionint k=12/0;int a;System.out.println(a0);int a=5,6,7,8;for(i=0;i 5;i+)(a+i+=+ai);Shape a;();5.4.2 常见异常常见异常非非Runtime ExceptionIOException:输入输出异常输入输出异常EOFException:文件结束异常文件结束异常FileNotFoundException:文件未找到异常文件未找到异常5.5 使用多个使用多个catch语句语句一个一个try语句可以和多个语句可以和多个ca
14、tch语句相关。语句相关。通常每个通常每个catch语句用于捕获语句用于捕获try语句中可能语句中可能抛出的一种类型的异常。抛出的一种类型的异常。示例:示例:5.6 捕获子类异常捕获子类异常超类的超类的catch语句可以捕获任何子类的异常语句可以捕获任何子类的异常在具有多个在具有多个catch的语句中,捕获超类异常的语句中,捕获超类异常的的catch应该放到应该放到catch序列的最后。序列的最后。示例:示例:try 代码代码(含抛出异常的方法调用含抛出异常的方法调用)catch(Exception e)异常处理代码异常处理代码/可捕获可捕获Exception类及其子类的异常类及其子类的异常5
15、.7 可嵌入的可嵌入的try代码块代码块一个一个try代码块可以嵌入到另一代码块可以嵌入到另一try代码块中代码块中当内部的当内部的try代码块产生的异常没有被与该代码块产生的异常没有被与该try语句对应的语句对应的catch语句捕获时,此异常便语句捕获时,此异常便会传送到外部的会传送到外部的try语句中。语句中。示例:示例:5.8 使用使用finally(1)finally代码块:代码块:try/catch语句块执行后必语句块执行后必须执行的代码块须执行的代码块try 代码代码0(含抛出异常的方法调用含抛出异常的方法调用)catch(异常类异常类1 e)异常处理代码异常处理代码1catch(
16、异常类异常类n e)异常处理代码异常处理代码nfinally 必须执行的代码必须执行的代码后续代码后续代码1)执行执行代码代码0;2)在执行在执行代码代码0的过程的过程中中,若无异常类的对象抛若无异常类的对象抛出出,则执行则执行finally后后必须必须执行的代码执行的代码,3)若有若有异常类异常类i的对象的对象抛出抛出,则执行则执行异常处理异常处理代码代码i,并执行并执行finally后后必须执行的代码必须执行的代码.4)执行后续代码执行后续代码.5.8 使用使用finally(2)无论何种原因退出无论何种原因退出无论何种原因退出无论何种原因退出try/catchtry/catch语句块,均
17、会执行语句块,均会执行语句块,均会执行语句块,均会执行finallyfinally语句块语句块语句块语句块n n由于产生异常而跳出由于产生异常而跳出由于产生异常而跳出由于产生异常而跳出try/catchtry/catch语句块语句块语句块语句块n n由于由于由于由于return/breakreturn/break等语句跳出等语句跳出等语句跳出等语句跳出try/catchtry/catch语句块语句块语句块语句块n n示例:示例:示例:示例:使用使用使用使用finallyfinally的时机的时机的时机的时机n n在在在在trytry语句中打开了文件语句中打开了文件语句中打开了文件语句中打开了文
18、件n n在在在在trytry语句中建立了网络连接语句中建立了网络连接语句中建立了网络连接语句中建立了网络连接n n在在在在trytry语句中建立了数据库连接语句中建立了数据库连接语句中建立了数据库连接语句中建立了数据库连接n n5.9 使用使用throw语句抛出异常语句抛出异常throwthrow语句格式:语句格式:语句格式:语句格式:throw 异常对象异常对象;public class Person private int age;public Person(int age)try if(age 0)throw new Exception(Negative age!);=age;catch
19、(Exception ex)();public static void main(String args)Person person=new Person(-1);5.10 throws声明声明throws throws 申明:申明一个方法将抛出某类异常申明:申明一个方法将抛出某类异常申明:申明一个方法将抛出某类异常申明:申明一个方法将抛出某类异常形式:形式:形式:形式:方法中若包含某类异常的抛出语句方法中若包含某类异常的抛出语句方法中若包含某类异常的抛出语句方法中若包含某类异常的抛出语句(Err(Err和和和和RuntimeExceptionRuntimeException类除外类除外类除外
20、类除外),),若该方法不捕获该异常,则若该方法不捕获该异常,则若该方法不捕获该异常,则若该方法不捕获该异常,则该方法必须用该方法必须用该方法必须用该方法必须用throwsthrows加以申明加以申明加以申明加以申明若某方法申明将抛出某类异常若某方法申明将抛出某类异常若某方法申明将抛出某类异常若某方法申明将抛出某类异常(Err(Err和和和和RuntimeExceptionRuntimeException类除外类除外类除外类除外),),则调用它的方法必须捕捉该类异常则调用它的方法必须捕捉该类异常则调用它的方法必须捕捉该类异常则调用它的方法必须捕捉该类异常示例:示例:示例:示例:修饰符修饰符 返回值类型返回值类型 方法名方法名(参数表参数表)throws 异常类异常类1,,异常类异常类n 方法体方法体void f()throws SomeException throw new SomeException();5.11 自定义异常自定义异常异常对象像普通对象一样,也可定义自己异常对象像普通对象一样,也可定义自己的类的类异常类都定义为异常类都定义为Exception的子的子(孙孙)类类异常类通常都实现异常类通常都实现toString法,用于报告异法,用于报告异常出现时显示该对象的内容常出现时显示该对象的内容例:例:TestException.java