Java异常处理与输入输出.ppt
《Java异常处理与输入输出.ppt》由会员分享,可在线阅读,更多相关《Java异常处理与输入输出.ppt(75页珍藏版)》请在三一办公上搜索。
1、第六章 Java异常处理、IO,李莉,1.Java异常处理 2.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中引入了异常和异常类。与其他对象一样,异常是面向对象的一部分,是异常类的对象。,
2、1.异常处理,Java中定义了很多异常类,每个异常类代表了一种运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。当Java程序运行过程中发生运行错误时,如果该运行错误是程序中已经定义过、可以被识别的错误,系统就会自动产生一个相应的异常类的对象,即产生一个异常。一旦产生了一个异常对象,系统中就一定有相应的机制来处理它,确保不会产生死机、死循环或其他对操作系统的损害,保证整个程序运行的安全性Java的异常处理机制。,1.异常处理,异常类结构与组成:Java的异常类是处理运行时错误的特殊类,每一种异常类对应一种特定的运行错误。所有的Java异常类都是Exception类的子类。,1.异常处
3、理Throwable类,1.异常处理,Throwable类:在java.lang包中的类;Throwable类派生了两个子类:Exception和Error;Error类由系统保留;Exception类则提供给应用程序使用。,1.异常处理Exception类,Exception类:Exception(String message):创建一个新的异常,message通常为该异常所对应的错误的描述。,1.异常处理Exception类,public String toString():返回描述当前Exception类信息的字符串。public void printStackTrace():在标准输出
4、设备上输出当前异常对象的堆栈使用情况,也即程序先后调用执行了哪些对象或类的哪些方法,使运行过程中产生了这个异常。,1.异常处理系统定义的异常类,Exception类有若干子类,每一个子类代表了一种特定的运行时错误。这些子类有些是系统事先定义好并包含在Java类库中的,称为系统定义的异常类。系统定义的运行异常通常对应着系统运行错误。这些错误可能导致操作系统错误甚至是整个系统的瘫痪,所以定义异常类进行处理。,1.异常处理系统定义的异常类,由于定义了运行时错误所相应的异常,Java程序即使产生一些致命的错误(如引用空对象等),系统也会自动产生一个对应的异常对象来处理这个错误,避免其蔓延或产生更大的问
5、题。,1.异常处理用户定义的异常类,系统定义的异常主要用来处理系统可以预见的较常见的运行错误;对于某个应用所特有的运行错误,需要程序员根据程序的特殊情况在程序中定义自己的异常类和异常对象。用户自定义异常主要用来处理用户程序中特定的逻辑运行错误。,1.异常处理用户定义的异常类,例:队列Queue中,出队列方法dequeue(),int dequeue()/出队列操作,若队列不空,则从队列头部取出一个数据int data;if(!isEmpty()data=m_FirstNode.getData();m_FirstNode=m_FirstNode.getNext();return data;els
6、e return-1;/调用此方法的方法需要单独处理;队列中不能保存“-1”,1.异常处理用户定义的异常类,定义异常类EmptyQueueException,专门处理“从空队列中出队”的逻辑错误:,class EmptyQueueException extends Exception/用户自定义的系统类的子类Queue sourceQueue;public EmptyQueueException(Queue q)super(“队列已空。”);sourceQueue=q;public String toString()/重载父类的方法,给出详细的错误信息 return(“队列”+sourceQu
7、eue.toString()+”为空,执行出队操作引发异常”);,1.异常处理用户定义的异常类,用户自定义异常处理程序中可能产生的逻辑错误,使这种错误能够及时地被系统识别、处理,不致扩散产生更坏的影响,从而使程序有更好的容错性、更安全稳定。创建用户自定义异常:(1)声明一个新的异常类,以Exception类或其他系统异常类或用户异常类为父类;(2)为新的异常类定义属性和方法,或重载父类的属性和方法,使这些属性和方法能够体现所对应错误的信息。,1.异常处理抛出异常,Java程序在运行时,如果发生了一个可识别的错误,系统就会产生一个与该错误相对应的异常类的对象,这个过程称为抛出异常。,1.异常处理
8、抛出异常,(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 异常类名;,1.异常处理抛
9、出异常,使用throw语句抛出异常:(1)通常在一定条件下才会抛出异常,应把throw语句放在if语句中,只有当if条件满足、用户定义的逻辑错误发生时才执行。(2)含有throw语句的方法,应该在方法头中增加如下部分:throws 异常类名列表告知所有调用者该方法包含throw语句,要准备接受和处理在运行过程中可能会抛出的异常。如果方法中的throw语句不止一个,方法头的异常类名列表也不止一个,应该包含所有可能产生的异常。,class EmptyQueueException extends Exception/用户自定义的系统类的子类Queue sourceQueue;public Empty
10、QueueException(Queue q)super(“队列已空。”);sourceQueue=q;public String toString()/重载父类的方法,给出详细的错误信息 return(“队列”+sourceQueue.toString()+”为空,执行出队操作引发异常”;,int dequeue()throws EmptyQueueException/出队列操作,若队列不空,则从队列头部取出一个数据int data;if(!isEmpty()data=m_FirstNode.getData();m_FirstNode=m_FirstNode.getNext();return
11、 data;else throw(new EmptyQueueException(this);,用户自定义的异常,需要程序员在程序的合适位置创建自定义异常的对象,并利用throw语句将这个异常对象抛出,1.异常处理处理异常,(1)捕捉异常:一个异常被抛出时,应该有专门的语句来接收被抛出的异常对象,称为捕捉异常。当一个异常类的对象被捕捉后,用户程序就会发生流程的跳转,系统中止当前的流程而跳转至专门的异常处理语句块,或直接跳出当前程序和Java虚拟机回到操作系统。,1.异常处理处理异常,在Java中,异常对象是被catch语句捕捉和处理的。异常处理语句块的格式如下:catch(异常类名 异常形式参
12、数名)异常处理语句组;,1.异常处理处理异常,每个catch语句块都应该与一个try语句块相对应。try语句块用来对其中的语句进行监视,出现异常的时候启动Java的异常处理机制。可能抛出异常的语句(包括throw语句、调用可能抛出异常的方法的方法调用语句),都应该包含在try语句块中。,public class Temp public static void main(String args)int a,b;tryb=0;a=3/b;catch(ArithmeticException e)System.out.println(Exception:);e.printStackTrace();Sy
13、stem.out.println(OK,Its Here!);,1.异常处理处理异常,(2)多异常的处理:一个try块可能产生多种不同的异常,可以使用多异常处理机制,用多个catch语句块对所有可能的异常进行捕获,每个catch块用来接收和处理一种特定的异常对象。如:public T newInstance()throws nstantiationException,IllegalAccessException用不同的catch块分别处理不同的异常对象,要求catch块能够区别不同的异常对象通过catch块的参数来实现的。,当try语句块抛出一个异常对象e时,程序的流程首先转向第一个catch
14、块检查当前异常对象是否可以被这个catch块所接收;如果e被第一个catch块所接收,则程序直接跳转到这个catch语句块中,语句块执行完毕后忽略try块中尚未执行的语句和其他的catch块,直接执行之后的语句;如果e与第一个catch块不匹配,系统将自动转到第二个catch块进行匹配,如果第二个仍不匹配,就转向第三个直到找到一个可以接收e的catch块,完成流程的跳转。,try语句块catch(Exception1 e1)catch(Exception2 e2)catch(Exception3 e3),异常对象e能否被一个catch语句块所接收,看该异常对象e与catch块的形式参数是否匹配
15、,如果:(1)异常对象与参数属于相同的异常类。or(2)异常对象属于参数异常类的子类。or(3)异常对象实现了参数所定义的接口。则异常对象将被接收。,如果所有的catch块都不能与当前的异常对象e匹配,则说明当前方法不能处理这个异常对象e,程序流程将返回到调用该方法的上层方法。如果这个上层方法中定义了异常对象e相匹配的catch块,流程就跳转到这个catch块中;否则继续回溯更上层的方法。如果所有的方法中都找不到合适的catch块,则由系统来处理这个异常对象。通常中止程序的执行,退出虚拟机返回操作系统,并在标准输出上打印相关的异常信息。,try语句块catch(Exception1 e1)ca
16、tch(Exception2 e2)catch(Exception3 e3),假设try块中所有语句的执行都没有引发异常,则所有的catch块都会被忽略而不予执行。,try语句块catch(Exception1 e1)catch(Exception2 e2)catch(Exception3 e3),在catch块处理不同的异常时:(1)catch块中的语句应根据异常的不同而执行不同的操作,通常应该打印异常和错误的相关信息,包括异常名称、产生异常的方法名等。(2)由于异常对象与catch块的匹配是按照catch块的先后排列顺序进行的,所以在多异常处理时应设计各catch块的排列顺序。越具体的异常
17、的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;(以随机数为分母的除法结果是:+100/i);(数组array+i+的值是:+arrayi);,public class Temp public static void main(String args)TestArray a=new TestArray();try a.ml();catch(Array
18、IndexOutOfBoundsException e1)(数组下标越界);catch(ArithmeticException e2)(运算错误,分母为0);e2.printStackTrace();(程序结束。);,1.Java异常处理2.Java输入输出,2.Java输入输出,任何一种计算机程序都需要进行输入输出处理,比如从键盘读取数据、保存或读入一个文件、在网络连接上读取数据等等。Java的输入输出处理封装在java.io包中,包含了不同情况下完成流式输入输出的类。利用输入输出类,Java程序可以实现多种输入输出操作和复杂的文件与目录管理。,2.Java输入输出,流:指在计算机的输入与输
19、出之间运动的数据序列。输入流代表从外设流入计算机的数据序列;输出流代表从计算机流向外设的数据序列。流式输入输出数据的获取和发送均沿数据序列顺序进行:每一个数据都必须等待排在它前面的数据读入或送出之后才能被读写;每次读写操作处理的都是序列中剩余的未读写数据的第一个,不能随意选择输入输出的位置。,2.Java输入输出,输入流:与输入端(数据源)连接,调用read方法从输入端获得数据。数据源:终端键盘、文件、内存区域或另一个输入流对象。输入流的数据源是另一个输入流的数据时,可以对前一个输入流的数据做进一步的处理或转换加强输入功能。,2.Java输入输出,输出流:与输出端(目的地)连接,调用write
20、方法向输出端输出数据。输出端:终端显示器、文件、内存区域或另一个输出流对象。输出流的输出为另一个输出流的数据时,对输出流的数据进行进一步的处理或转换加强输出功能。,2.Java输入输出,输入输出流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据,如字符流序列、数字流序列等。根据不同的数据、不同的数据序列方向,输入输出流的属性和处理方法也不同,在Java的输入输出类库中,有各种不同的输入输出类。,2.Java输入输出,Java中最基本的输入输出流类:基本输入流InputStream和基本输出流OutputStream。这两个类是最基本的输入输出功能
21、的抽象类,其他所有输入流类都是继承了InputStream的基本输入功能、并根据自身属性对这些功能加以扩充的InputStream类的子类;其他所有输出流类也都是继承了OutputStream的基本输出功能并加以扩展的OutputStream的子类。所有的输入输出流类都是Java的基本输入输出类的子类。,2.Java输入输出InputStream,public abstract class InputStream extends Object implements Closeable字节输入流的所有类的父类,2.Java输入输出InputStream,当程序需要从外设中读入数据时,应该创建一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 异常 处理 输入输出

链接地址:https://www.31ppt.com/p-6509802.html