Java异常处理 第六节.ppt_第1页
Java异常处理 第六节.ppt_第2页
Java异常处理 第六节.ppt_第3页
Java异常处理 第六节.ppt_第4页
Java异常处理 第六节.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、第六节 Java异常处理,public class Temp public static void main(String args) String a = Hello,Java,World,!; for(int i = 0;i5;i+) System.out.println(ai); ,1. 异常处理,异常(Exception):是特殊的运行错误对象,对应着Java语言特定的运行错误处理机制。 通常Java程序运行在网络环境中,需要考虑安全性。为了处理程序中的运行错误,Java中引入了异常和异常类。 与其他对象一样,异常是面向对象的一部分,是异常类的对象。,1. 异常处理,Java中定义了很

2、多异常类,每个异常类代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。 当Java程序运行过程中发生运行错误时,如果该运行错误是程序中已经定义过、可以被识别的错误,系统就会自动产生一个相应的异常类的对象,即产生一个异常。 一旦产生了一个异常对象,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,保证整个程序运行的安全性Java的异常处理机制。,1. 异常处理,异常类结构与组成: Java的异常类是处理运行时错误的特殊类,每一种异常类对应一种特定的运行错误。 Throwable 类:在java.lang包中,是 Java 语言中所有错误或异常的

3、超类。Throwable类派生了两个子类:Exception和Error; Error类由系统保留; Exception类则提供给应用程序使用。所有的Java异常类都是Exception类的子类。,1. 异常处理Throwable类,1. 异常处理Exception类,Exception类:public class Exception extends Throwable 构造方法: Exception():构造详细消息为 null 的新异常。 Exception(Stringmessage):构造带指定详细消息的新异常。 Exception(Stringmessage, Throwableca

4、use) :构造带指定详细消息和原因的新异常。 Exception(Throwablecause):根据指定原因的详细消息构造新异常 如:Exception myException = new Exception(“堆栈空了”);xception(String message):创建一个新的异常,message通常为该异常所对应的错误的描述。,1. 异常处理Exception类,public String toString():返回描述当前Exception类信息的字符串。 public void printStackTrace():在标准输出设备上输出当前异常对象的堆栈使用情况,也即程序先后

5、调用执行了哪些对象或类的哪些方法,使运行过程中产生了这个异常。,1. 异常处理系统定义的异常类,Exception类有若干子类,每一个子类代表了一种特定的运行时错误。这些子类有些是系统事先定义好并包含在Java类库中的,称为系统定义的异常类。 系统定义的运行异常通常对应着系统运行错误。这些错误可能导致操作系统错误甚至是整个系统的瘫痪,所以定义异常类进行处理。,由于定义了运行时错误所相应的异常,Java程序即使产生一些致命的错误(如引用空对象等),系统也会自动产生一个对应的异常对象来处理这个错误,避免其蔓延或产生更大的问题。,1. 异常处理用户定义的异常类,系统定义的异常主要用来处理系统可以预见

6、的较常见的运行错误;对于某个应用所特有的运行错误,需要程序员根据程序的特殊情况在程序中定义自己的异常类和异常对象。 用户自定义异常主要用来处理用户程序中特定的逻辑运行错误。,1. 异常处理用户定义的异常类,例:队列Queue中,出队列方法dequeue(),int dequeue( ) /出队列操作,若队列不空,则从队列头部取出一个数据 int data; if(!isEmpty( ) data = m_FirstNode.getData( ); m_FirstNode = m_FirstNode.getNext( ); return data; else return -1; / 队列中不能

7、保存“-1”;调用此的方法需要了解约定规则 ,1. 异常处理用户定义的异常类,定义异常类EmptyQueueException,专门处理 “从空队列中出队”的逻辑错误:,class EmptyQueueException extends Exception /用户自定义的系统类的子类 Queue sourceQueue; public EmptyQueueException(Queue q) super(“队列已空。”); sourceQueue = q; public String toString( ) /重载父类的方法,给出详细的错误信息 return (“队列”+sourceQueue

8、.toString()+“为空,执行出队操作引发异常”); , 用户自定义异常:处理程序中可能产生的逻辑错误,使这种错误能够及时地被系统识别、处理,不致扩散产生更坏的影响,从而使程序有更好的容错性、更安全稳定。,1. 异常处理用户定义的异常类,创建用户自定义异常: (1) 声明一个新的异常类,以Exception类或其他系统异常类或用户异常类为父类; (2) 为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现所对应错误的信息。 如 toString(),1. 异常处理抛出异常,抛出异常: Java程序在运行时,如果发生了一个可识别的错误,系统就会产生一个与该错误相对应

9、的异常类的对象,这个过程称为抛出异常。 (1) 系统定义的运行异常系统自动抛出,public class Temp public static void main(String args) int a=0, b=5; System.out.println(b/a); /以零为除数,引发系统定义的算术异常 ,1. 异常处理抛出异常,抛出异常: (2)自定义的异常语句抛出 用户自定义的异常必须借助于throw语句来抛出,说明哪种情况产生了这种错误,并抛出该异常类的新对象。 用throw语句抛出异常对象的语法格式为:,修饰符 返回类型 方法名 ( 参数列表 ) throws 异常类名列表 throw

10、 异常类对象; ,1. 异常处理抛出异常,使用throw语句抛出异常: (1) 通常在一定条件下才会抛出异常,应把throw语句放在if语句中,只有当if条件满足、用户定义的逻辑错误发生时才执行。 (2) 含有throw语句的方法,应该在方法头中增加如下部分:throws 异常类名列表 告知所有调用者该方法包含throw语句,要准备接受和处理在运行过程中可能会抛出的异常。 如果方法中的throw语句不止一个,方法头的异常类名列表也不止一个,应该包含所有可能产生的异常。,class EmptyQueueException extends Exception /用户自定义的系统类的子类 Queue

11、 sourceQueue; public EmptyQueueException(Queue q) super(“队列已空。”); sourceQueue = q; public String toString( )/重载父类的方法,给出详细的错误信息 return(“队列”+sourceQueue.toString()+“为空,执行出队操作引发异常”; ,int dequeue( ) throws EmptyQueueException /出队列操作,若队列不空,则从队列头部取出一个数据 int data; if(!isEmpty( ) data = m_FirstNode.getData(

12、 ); m_FirstNode = m_FirstNode.getNext( ); return data; else throw (new EmptyQueueException(this); ,用户自定义的异常,需要程序员在程序的合适位置创建自定义异常的对象,并利用throw语句将这个异常对象抛出,1. 异常处理处理异常,捕捉异常: 一个异常被抛出时,应该有专门的语句来接收被抛出的异常对象,称为捕捉异常。 当一个异常类的对象被捕捉后,用户程序就会发生流程的跳转,系统中止当前的流程而跳转至专门的异常处理语句块,或直接跳出当前程序和Java虚拟机回到操作系统。 异常对象被catch语句捕捉和处

13、理,异常处理语句块的格式为:,catch (异常类名 异常形式参数名) 异常处理语句组;,1. 异常处理处理异常,捕捉异常: 每个catch语句块都应该与一个try语句块相对应。 try语句块用来对其中的语句进行监视,出现异常的时候启动Java的异常处理机制。 任何可能抛出异常的语句(包括throw语句、调用可能抛出异常的方法的方法调用语句),都应该包含在try语句块中。,public class Temp public static void main(String args) int a,b; try b = 0; a = 3 / b; catch (ArithmeticException

14、 e) System.out.println(Exception:); e.printStackTrace(); System.out.println(OK,Its Here!); ,1. 异常处理处理异常,多异常的处理: 一个try块可能产生多种不同的异常: public T newInstance() throws nstantiationException, IllegalAccessException 可以使用多异常处理机制,用多个catch语句块对所有可能的异常进行捕获,每个catch块用来接收和处理一种特定的异常对象。 用不同的catch块分别处理不同的异常对象,要求catch块能

15、够区别不同的异常对象通过catch块的参数来实现的。,1. 异常处理处理异常,当try语句块抛出一个异常对象e时,程序的流程首先转向第一个catch块检查当前异常对象是否可以被这个catch块所接收; 如果e被第一个catch块所接收,则程序直接跳转到这个catch语句块中,语句块执行完毕后忽略try块中尚未执行的语句和其他的catch块,直接执行之后的语句; 如果e与第一个catch块不匹配,系统将自动转到第二个catch块进行匹配,如果第二个仍不匹配,就转向第三个直到找到一个可以接收e的catch块,完成流程的跳转。,try 语句块 catch(Exception1 e1) catch(E

16、xception2 e2) catch(Exception3 e3) ,1. 异常处理处理异常,异常对象e能否被一个catch语句块所接收? 看该异常对象e与catch块的形式参数是否匹配,如果: (1) 异常对象与参数属于相同的异常类 or (2) 异常对象属于参数异常类的子类 or (3) 异常对象实现了参数所定义的接口 异常对象将被接收。,1. 异常处理处理异常,如果所有的catch块都不能与当前的异常对象e匹配,则说明当前方法不能处理这个异常对象e,程序流程将返回到调用该方法的上层方法。 如果这个上层方法中定义了异常对象e相匹配的catch块,流程就跳转到这个catch块中;否则继续回

17、溯更上层的方法。 如果所有的方法中都找不到合适的catch块,则由系统来处理这个异常对象。通常中止程序的执行,退出虚拟机返回操作系统,并在标准输出上打印相关的异常信息。,try 语句块 catch(Exception1 e1) catch(Exception2 e2) catch(Exception3 e3) ,1. 异常处理处理异常,假设try块中所有语句的执行都没有引发异常,则所有的catch块都会被忽略而不予执行。,try 语句块 catch(Exception1 e1) catch(Exception2 e2) catch(Exception3 e3) ,1. 异常处理处理异常,在ca

18、tch块处理不同的异常时: catch块中的语句应根据异常的不同而执行不同的操作,一般为打印异常和错误的相关信息,包括异常名称、产生异常的方法名等。 由于异常对象与catch块的匹配是按照catch块的先后排列顺序进行的,所以在多异常处理时应设计各catch块的排列顺序。越具体的异常的catch块应放在越前面,而可以与多种异常相匹配的catch块应放在较后的位置。,class TestArray private int i; private int array = 1, 2, 3, 4, 5 ; void ml() while (true) i = (int)(Math.random() * 10)-5; System.out.println(以随机数为分母的除法结果是: + 100 / i); System.out.println(数组array + i + 的值是: + arrayi); ,public class Temp

温馨提示

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

评论

0/150

提交评论