第07章异常处理_第1页
第07章异常处理_第2页
第07章异常处理_第3页
第07章异常处理_第4页
第07章异常处理_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、Java面向对象面向对象程序设计基础教程程序设计基础教程河南大学计算机与信息工程学院河南大学计算机与信息工程学院目录目录第第1章章 Java语言概述语言概述第第2章章 Java基本语法规则基本语法规则第第3章章 Java中的面向对象技术中的面向对象技术第第4章章 Java基本结构程序基本结构程序第第5章章 Java基本类基本类第第6章章 图形用户界面图形用户界面第第7章章 异常处理异常处理第第8章章 多线程多线程第第9章章 Java Applet程序程序第第10章章 输入输出流与文件处理输入输出流与文件处理第第11章章 Java网络编程网络编程第第12章章 数据库应用数据库应用3第第7章章 异

2、常处理异常处理7.1 异常处理概述异常处理概述7.2 Java的异常处理的异常处理4n异常:异常:程序运行过程中发生的异常事件程序运行过程中发生的异常事件,这些,这些事件的发生将事件的发生将阻止程序的正常运行。阻止程序的正常运行。 例如:例如:除除0 0、数组越界、文件找不到等。、数组越界、文件找不到等。第第7章章 异常处理异常处理n异常处理机制:异常处理机制:在一个方法运行时,在一个方法运行时,如果发生了异常,则这如果发生了异常,则这个方法生成一个对象代表该异常,并把它交给运行时系统,个方法生成一个对象代表该异常,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。运行时系统寻找相

3、应的代码来处理这一异常。n抛出异常:抛出异常:生成异常对象并把它提交给运行时系统的过程生成异常对象并把它提交给运行时系统的过程称称为抛出异常。为抛出异常。n捕获异常:捕获异常:运行时系统在方法的调用栈中查找,从生成异常运行时系统在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到包含相应异常处理的方法为止的方法开始回溯,直到找到包含相应异常处理的方法为止,这一过程称为捕获异常。这一过程称为捕获异常。57.1.1 程序中常见的错误程序中常见的错误7.1.2 Java中的异常类中的异常类7.1.3 异常处理过程异常处理过程7.1 异常处理概述异常处理概述6n1.面向过程语言错误处理方式的缺陷面

4、向过程语言错误处理方式的缺陷nC语言中,通过调用语言中,通过调用if语句来判断是否出现了异常,这样语句来判断是否出现了异常,这样使得异常的发现和处理与正常代码相混淆。使得异常的发现和处理与正常代码相混淆。n面向过程语言面向过程语言提供的错误处理方式是不完全的提供的错误处理方式是不完全的,不能保证,不能保证及时发现错误并制止错误的蔓延。及时发现错误并制止错误的蔓延。n面向过程语言面向过程语言没有提供对运行时错误的防范和处理机制没有提供对运行时错误的防范和处理机制,只能任凭错误的产生而只能任凭错误的产生而导致程序运行中断导致程序运行中断。7.1 异常处理概述异常处理概述7n2.面向对象语言的异常处

5、理思想面向对象语言的异常处理思想n在面向对象设计中,程序的在面向对象设计中,程序的正确性、可靠性正确性、可靠性和和稳定性稳定性比比程序效率更重要程序效率更重要。n面向对象语言面向对象语言提供语言级的错误防范和处理机制提供语言级的错误防范和处理机制,这就,这就是是异常处理机制异常处理机制,它提供全面的、严格的错误检查与处,它提供全面的、严格的错误检查与处理方法。理方法。n使用异常机制,使用异常机制,将程序将程序正常代码正常代码与与错误处理代码错误处理代码分开分开,使程序结构清晰,读写和调试代码变得清晰;使用异常使程序结构清晰,读写和调试代码变得清晰;使用异常处理语句处理语句使程序具有处理错误的能

6、力使程序具有处理错误的能力。7.1 异常处理概述异常处理概述87.1.1 程序中常见的错误程序中常见的错误1.语法错语法错n如果程序如果程序编译不通过编译不通过,说明程序中存在,说明程序中存在语法错误语法错误。n语法错误语法错误: :由于违反语法规则产生的由于违反语法规则产生的。 例:例:标识符未声明、括号不匹配、语句末尾缺少分号等。标识符未声明、括号不匹配、语句末尾缺少分号等。n处理方法:处理方法:Java编译器编译器能发现语法错误能发现语法错误,并给出错误的,并给出错误的位置和性质。程序员必须改正这些语法错误,才能重新位置和性质。程序员必须改正这些语法错误,才能重新编译程序。编译程序。n例

7、:例:string string=Tom;92.语义错语义错n异常异常:如果如果编译通过编译通过,但程序在,但程序在运行时因为出现错误而被运行时因为出现错误而被迫终止运行迫终止运行,则称这种错误为,则称这种错误为异常异常。nJava解释器解释器在运行时能够发现异常,在运行时能够发现异常,一旦发现了异常,一旦发现了异常,Java将停止程序运行,将停止程序运行,并给出异常的位置和性质并给出异常的位置和性质。n处理方法:处理方法:若编程时考虑周全,若编程时考虑周全,有些异常是可以避免的有些异常是可以避免的。还有一些异常是还有一些异常是不可预知的,不能不可预知的,不能在程序中在程序中事先处理事先处理,

8、如打开文件不存在等,这些错误的发生不能由程序本身如打开文件不存在等,这些错误的发生不能由程序本身所控制,因此必须进行异常处理。所控制,因此必须进行异常处理。7.1.1 程序中常见的错误程序中常见的错误103.逻辑错逻辑错n逻辑错误逻辑错误: 如果程序如果程序编译通过编译通过,也能,也能正常运行正常运行,但,但运行运行结果与期望不相符结果与期望不相符,这说明程序中存在,这说明程序中存在逻辑错误逻辑错误。n例如:例如:由于分支语句中的判断条件设置错误,导致某个由于分支语句中的判断条件设置错误,导致某个数据参与到不正确的分支中进行计算。数据参与到不正确的分支中进行计算。n逻辑错逻辑错往往是由于程序的

9、往往是由于程序的设计思路不正确设计思路不正确而造成的。而造成的。n处理方法:处理方法:系统是系统是不能自动检查出逻辑错误的,不能自动检查出逻辑错误的,只能靠只能靠编程人员凭经验分析并改错。编程人员凭经验分析并改错。7.1.1 程序中常见的错误程序中常见的错误11nJava语言中用语言中用异常类对象异常类对象来描述异常。在程序的执行过程来描述异常。在程序的执行过程中,如果发生了异常,就会生成一个异常类对象。中,如果发生了异常,就会生成一个异常类对象。n异常类对象:异常类对象:包含异常的包含异常的类型类型,以及,以及当异常发生时程序的当异常发生时程序的运行状态。运行状态。n异常类的祖先类:异常类的

10、祖先类:java.lang.Throwable。nThrowable类:类:定义了方法来检索与异常相关的信息,并定义了方法来检索与异常相关的信息,并打印显示异常发生的栈跟踪信息。打印显示异常发生的栈跟踪信息。ngetMessage():返回返回String类型的异常信息。类型的异常信息。nprintStackTrace():打印栈跟踪信息。打印栈跟踪信息。7.1.2 Java中的异常类中的异常类1.Java用异常类来处理异常用异常类来处理异常12n根据异常的性质不同,根据异常的性质不同,Throwable类又派生出两个类类又派生出两个类Error类和类和Exception类。类。nError

11、(错误错误)类:类:表示仅靠程序本身无法修复的严重错误。表示仅靠程序本身无法修复的严重错误。nError类对象类对象由由Java虚拟机生成并抛出给系统虚拟机生成并抛出给系统,有内存溢出,有内存溢出错误、系统崩溃、动态链接失败等。错误、系统崩溃、动态链接失败等。Java程序中的错误在运行时生成程序中的错误在运行时生成Error类的对象。类的对象。7.1.2 Java中的异常类中的异常类1.Java用异常类来处理异常用异常类来处理异常13nException(异常异常)类类:表示程序本身可以处理的异常:表示程序本身可以处理的异常nException类对象类对象由由Java程序中程序中正运行的方法正

12、运行的方法生成生成。n自身类中自身类中只声明了一些构造方法只声明了一些构造方法。nException类类派生派生许多子类许多子类,也可以,也可以自定义自定义异常类异常类。n每个异常对应于每个异常对应于Exception类的一个子类的实例,异常对象类的一个子类的实例,异常对象中中包含异常的位置和特征信息包含异常的位置和特征信息。RuntimeException: 运行时异常运行时异常,指由程序本身错误引发,指由程序本身错误引发的异常,这类异常在程序设计时大多可以避免。的异常,这类异常在程序设计时大多可以避免。7.1.2 Java中的异常类中的异常类1.Java用异常类来处理异常用异常类来处理异常

13、14nRuntimeException类的一些常用子类类的一些常用子类(1) 算术异常类算术异常类ArithmeticException:当进行整数除法或取余当进行整数除法或取余运算时,如果除数为运算时,如果除数为0 0,则产生该异常。,则产生该异常。7.1.2 Java中的异常类中的异常类(2) 空对象异常空对象异常NullPointerException:当一个对象赋值为当一个对象赋值为null时,若通过该空对象调用方法,则产生该异常。时,若通过该空对象调用方法,则产生该异常。例例: String str=null; System.out.println(str.length(); (3)

14、类型强制转换异常类型强制转换异常ClassCastException:当进行类型强制当进行类型强制 转换时,如果遇到不能进行的转换操作,则产生该异常。转换时,如果遇到不能进行的转换操作,则产生该异常。例:例:Object obj=new object(); String str=(String) obj; Person p=new Student(); Student s=(Student) p;15(4)数组下标越界异常数组下标越界异常ArrayIndexOutOfBoundsException: 当访问数组元素时,如果下标越界,则产生该异常。当访问数组元素时,如果下标越界,则产生该异常。例

15、如:例如: int arr=new int1; arr1=1;7.1.2 Java中的异常类中的异常类(5)数值格式异常数值格式异常NumberFormatException:当将字符串转换当将字符串转换 成整数时,如果给定字符串不符合整数格式,则产生该异常。成整数时,如果给定字符串不符合整数格式,则产生该异常。例如:例如:int j=Integer.parseInt(“abc”);【例例】RuntimeException类常用子类类常用子类举例。举例。16图图1 Java中异常类的层次关系图中异常类的层次关系图2.错误类和异常类的层次关系错误类和异常类的层次关系17一个一个异常对象经历抛出、

16、捕获及处理过程:异常对象经历抛出、捕获及处理过程:抛出抛出(throw)异常异常创建一个异常类对象的过程创建一个异常类对象的过程;捕获捕获(catch)异常异常获得异常对象的过程获得异常对象的过程;处理异常处理异常对异常对象执行相应操作的过程对异常对象执行相应操作的过程;注:注:异常对象由捕获它的语句进行处理。异常对象由捕获它的语句进行处理。7.1.3 异常处理过程异常处理过程187.1.3 异常处理过程异常处理过程1) 抛出异常:抛出异常:程序运行时出现异常则生成异常对象,生成的程序运行时出现异常则生成异常对象,生成的异常对象被提交给异常对象被提交给JVM。2) 捕获异常捕获异常: :JVM

17、得到一个异常对象后,它将会寻找处理这得到一个异常对象后,它将会寻找处理这一异常的代码,寻找的过程一异常的代码,寻找的过程从生成异常的方法开始从生成异常的方法开始,沿着沿着方法的调用栈方法的调用栈逐层回溯逐层回溯,直到找到包含相应异常处理的方,直到找到包含相应异常处理的方法为止。然后法为止。然后JVM将当前异常类对象交给该方法进行处理。将当前异常类对象交给该方法进行处理。3) 如果查遍整个调用栈仍如果查遍整个调用栈仍找不到找不到合适的异常处理方法合适的异常处理方法,则,则JVM将终止将终止Java程序的执行。程序的执行。197.2.1 trycatchfinally异常处理语句异常处理语句7.2

18、.2 用用throw抛出自定义异常对象抛出自定义异常对象7.2.3 用用throws将异常抛给上级调用方法处理将异常抛给上级调用方法处理7.2.4 自定义异常类自定义异常类7.2 Java的异常处理的异常处理207.2.1 try-catch-finally语句语句try 语句序列语句序列1 /存在潜在异常的代码块存在潜在异常的代码块 catch (异常类异常类 异常对象名异常对象名) / 用于捕获并处理指定类型的异常对象,参数是一个异常对象用于捕获并处理指定类型的异常对象,参数是一个异常对象e, 其类型必须是其类型必须是Exception类及其子类。类及其子类。语句序列语句序列2 /对某种异

19、常类对象进行处理的代码块对某种异常类对象进行处理的代码块 finally /子句可以省略子句可以省略语句序列语句序列3 /无论是否捕获到异常,最后必须执行的代码块无论是否捕获到异常,最后必须执行的代码块1. 异常处理语句语法异常处理语句语法 217.2.1 try-catch-finally语句语句n说明说明n多个多个catch子句需要按异常类子句需要按异常类从子类到父类从子类到父类的次序依次的次序依次排列。排列。n若所有若所有catch子句都没有捕获子句都没有捕获e,则则e将由将由Java虚拟机捕虚拟机捕获并处理,导致程序运行终止,就像没有使用获并处理,导致程序运行终止,就像没有使用try语

20、句。语句。因此,因此,通常最后一个通常最后一个catch子句的异常类是子句的异常类是Exception。ntry 块不能单独存在块不能单独存在,后面必须跟,后面必须跟catch块或块或finally块。块。n如果程序某处发生异常,则如果程序某处发生异常,则try语句中语句中此处之后的代码此处之后的代码都都不会不会被执行被执行。22例如:例如:try String s=“abc”; int i=Integer.parseInt(s); /此语句存在异常,所以放在此语句存在异常,所以放在try语句中语句中 int a=i+10; /位于异常发生处之后,不会被执行位于异常发生处之后,不会被执行7.2

21、.1 try-catch-finally语句语句237.2.1 try-catch-finally语句语句n说明说明nfinally块是块是无论是否出现异常,都会运行的块无论是否出现异常,都会运行的块。n通常在通常在finally块中可以块中可以编写资源返还给系统的语句编写资源返还给系统的语句,通,通常,这些语句常,这些语句包括但不限于包括但不限于:n释放动态分配的内存块释放动态分配的内存块n关闭文件关闭文件n关闭数据库结果集关闭数据库结果集关闭与数据库建立的连接关闭与数据库建立的连接24例如:例如:调用调用parseInt()方法的异常处理语句如下:方法的异常处理语句如下:String st

22、r = 123a;try int i = Integer.parseInt(str); /调用声明抛出异常的方法调用声明抛出异常的方法catch (NumberFormatException e) /捕获捕获parseInt()方法声明的异常对象方法声明的异常对象 System.out.println(str+字符串不能转换为整数字符串不能转换为整数);catch (Exception e) /捕获所有异常对象捕获所有异常对象 e.printStackTrace(); /显示异常栈跟踪信息显示异常栈跟踪信息7.2.1 try-catch-finally语句语句25图图 异常处理语句的执行流程异

23、常处理语句的执行流程7.2.1 try-catch-finally语句语句26(1) 正常情况下正常情况下(即没有产生异常时即没有产生异常时) (2) 捕获异常并处理捕获异常并处理 首先执行首先执行try子句中的语句序列;子句中的语句序列; 若若没有产生异常没有产生异常则则跳过跳过catch子句子句, 再执行再执行finally子句中的语句序列;子句中的语句序列; 然后继续执行然后继续执行后面的语句。后面的语句。catch子句说明:子句说明: catch语句可以有语句可以有多个多个,分别处理,分别处理不同类的不同类的异常。异常。2. try语句执行流程语句执行流程7.2.1 try-catch

24、-finally语句语句27(2) 捕获异常并处理捕获异常并处理 执行执行try子句子句出现出现运行错运行错时,时,Java抛出一个异常对象抛出一个异常对象e, Java按照按照多个多个catch子句的子句的书写次序从上向下书写次序从上向下依次查找每个依次查找每个catch子句中子句中的异常类,一旦的异常类,一旦异常对象异常对象e是某个是某个catch子句的异常类或其子类实子句的异常类或其子类实例例,则被该,则被该catch子句捕获并处理,子句捕获并处理,一个异常对象一个异常对象只能被一个只能被一个catch子句捕获子句捕获,之后,之后Java将将自动清除自动清除该异常对象该异常对象,其它其它

25、catch子句子句或或外外层的层的try语句语句将将不能不能再捕获该异常对象。再捕获该异常对象。多个多个catch子句需要子句需要按异常类按异常类从子类到父类的次序从子类到父类的次序依次排列依次排列。2. try语句执行流程语句执行流程7.2.1 try-catch-finally语句语句28(2) 捕获异常并处理捕获异常并处理 n如果如果所有所有catch子句都子句都没有没有捕获捕获e,则,则e将由将由Java虚拟机捕获并虚拟机捕获并 处理,导致程序处理,导致程序运行终止运行终止,就像没有使用就像没有使用try语句。语句。= 因此,通常因此,通常最后一个最后一个catch子句子句的的异常类参

26、数异常类参数声明为声明为Exception, 这样这样能够保证能够保证捕获和处理所有异常对象。捕获和处理所有异常对象。2. try语句执行流程语句执行流程7.2.1 try-catch-finally语句语句29(3) 执行执行finally子句子句 finally子句中的语句系列是子句中的语句系列是最后最后必须执行必须执行的代码,无论的代码,无论是否是否产生产生异常。异常。 当当try子句中的某条语句产生一个异常时,子句中的某条语句产生一个异常时,该语句该语句之后的之后的语句序列都将语句序列都将不会不会被执行被执行。如果有些语句如果有些语句肯定需要被执行肯定需要被执行,不管是否产生了异常不管

27、是否产生了异常,则这些语句,则这些语句需要写在需要写在finally子句中子句中。 注:注:try-catch- finally 语句的结构语句的结构使使正常执行的语句正常执行的语句与与异常处理异常处理的语句的语句分离分离,增强了增强了程序的程序的可读性可读性。 2. try语句执行流程语句执行流程7.2.1 try-catch-finally语句语句30【例例7.1】try-catch- finally 语句举例语句举例: Sample_1.java TestException.java 3. 举例举例7.2.1 try-catch-finally语句语句317.2.2 用用throw抛出自

28、定义异常对象抛出自定义异常对象n一个异常对象一个异常对象可由可由Java虚拟机抛出虚拟机抛出,也可由也可由程序程序主动抛出主动抛出。若程序中存在。若程序中存在逻辑错误逻辑错误,但,但不是不是Java的异常,的异常,程序程序可可主动抛出主动抛出一个异常对象一个异常对象。n语法格式:语法格式:throw 异常对象异常对象n由由throw语句抛出的异常也语句抛出的异常也必须必须由由try语句捕获并语句捕获并处理处理。异常抛出和处理。异常抛出和处理既可既可在一个方法中在一个方法中,也可也可分分别在不同的方法中别在不同的方法中。327.2.2 用用throw抛出自定义异常对象抛出自定义异常对象n举例:举例:public void set(int age) if (age0 & age100) this.age=age; else throw new Exception(“I

温馨提示

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

评论

0/150

提交评论