《Java程序设计课件Java程序设计 (6).pdf》由会员分享,可在线阅读,更多相关《Java程序设计课件Java程序设计 (6).pdf(159页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Java语言程序设计(第2版)第 5 章 异常处理与输入/输出流BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学2BBBBBBBBBBBBBBBBBBBBB
2、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学3目录 异常处理简介 输入/输出流的概念 文件读写BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
3、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学4BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
4、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学什么是异常处理?在程序运行过程中有可能发生异常事件,这些事件的发生将阻止程序的正常运行 如何异常事件引起的错误?把错误交给谁去处理?程序又该如何从错误中恢复?Java语言具有运行错误处理机制。5BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
5、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学异常的基本概念 又称为例外,是特殊的运行错误对象 Java中声明了很多异常类,每个异常类都代表了一种运行错误,类中包含了 该运行错误的信息 处理错误的方法 每当Java程序运行过程中发生一个可识别的运行错误时,即该错
6、误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象,即产生一个异常。6BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学7 抛出(throw
7、)异常 捕获(catch)异常java处理异常的方法BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学8 抛出(throw)异常 在方法的运行过程中,如果
8、发生了异常,则该方法生成一个代表该异常的对象并把它交给运行时系统,运行时系统便寻找相应的代码来处理这一异常。捕获(catch)异常 运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回溯,直到找到包含相应异常处理的方法为止。java处理异常的方法BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMM
9、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学9Java异常处理机制的优点BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
10、MMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学10 将错误处理代码从常规代码中分离出来;按错误类型和差别分组;对无法预测的错误的捕获和处理;克服了传统方法的错误信息有限的问题;把错误传播给调用堆栈。Java异常处理机制的优点BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMM
11、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学错误的分类 根据错误的严重程度不同,可分为两类 错误 致命性的,程序无法处理;Error类是所有错误类的父类。异常 非致命性的,可编制程序捕获和处理;Exception类是所有异常类的父类。11BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
12、BBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学异常的分类 非检查型异常 不期望程序捕获的异常,在方法中不需要声明,编译器也不进行检查。继承自RuntimeException。不要求捕获和声明的原因:引发RuntimeException的操作在Java应用程序中会频繁出现。例如,若每次使用对象时,都必须编写异常处理代码来检查null引用,则整个应用程序很快将变成一个庞大的try-catch块。它们表示的问题不
13、一定作为异常处理。如:可以在除法运算时检查0值,而不使用ArithmeticException。可以在使用引用前测试空值。检查型异常 其他类型的异常。如果被调用的方法抛出一个类型为E的检查型异常,那么调用者必须捕获E或者也声明抛出E(或者E的一个父类),对此编译器要进行检查。12BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMM
14、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学预定义的一些常见异常 Java预定义的一些常见异常 ArithmeticException 整数除法中除数为0 NullPointerException 访问的对象还没有实例化 NegativeArraySizeException 创建数组时元素个数是负数 ArrayIndexOutOfBoundsException 访问数组元素时,数组下标越界 ArrayStoreException 程序试图向数组中存取错误类型的数据
15、 FileNotFoundException 试图存取一个并不存在的文件 IOException 通常的I/O错误14非检查型异常检查型异常BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语
16、言程序设计(第2版),郑莉,清华大学例:非检查型异常数组越界异常15BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:非检查型异常数组越界异常import java.io.*;public cla
17、ss HelloWorld public static void main(String args)int i=0;String greetings =Hello world!,No,I mean it!,HELLO WORLD!;while(i 4)System.out.println(greetingsi);i+;BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
18、BBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:非检查型异常数组越界异常 运行结果Hello world!No,I mean it!HELLO WORLD!Exception in thread main java.lang.ArrayIndexOutOfBoundsExceptionat HelloWorld.main(HelloWorld.java:7)说明 访问数组下标越界,导致ArrayIndexOutOfBoundsException异常。该异常是系统定义好的
19、类,对应系统可识别的错误,所以Java虚拟机会自动中止程序的执行流程,并新建一个该异常类的对象,即抛出数组出界异常。BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑
20、莉,清华大学结束语 这一节介绍了异常的基本概念和一个简单的例子。18BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学19BBBBBBBBBBBBBBBBBB
21、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学20检查型异常的处理 声明抛出异常 不在当前方法内处理异常,可以使用throws子句声明将异常抛出到调用方法中;如果所有的方法都选择了抛出此
22、异常,最后 JVM将捕获它,输出相关的错误信息,并终止程序的运行。捕获异常 使用trycatch()块,捕获到所发生的异常,并进行相应的处理BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语
23、言程序设计(第2版),郑莉,清华大学21Method4Method3Method2Method1探测抛出异常捕获处理异常调用异常处理示意图BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言
24、程序设计(第2版),郑莉,清华大学抛出异常的例子现在看一个不捕获、直接抛出异常的例子22BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM抛出异常的例子public void openThisFile
25、(String fileName)throws java.io.FileNotFoundException /code for method public void getCustomerInfo()throws java.io.FileNotFoundException /do something this.openThisFile(customer.txt);/do something 如果在openThisFile中抛出了FileNotfoundException异常,getCustomerInfo将停止执行,并将此异常传送给它的调用者BBBBBBBBBBBBBBBBBBBBBBBBBB
26、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学捕获异常的语法try statement(s)catch(exceptiontype name)statement(s)finally statement(
27、s)BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学捕获异常的语法 说明 try 语句 其后跟随可能产生异常的代码块。catch语句 其后跟随异常处理语
28、句,通常都要用到两个方法:getMessage()返回一个字符串,对发生的异常进行描述。printStackTrace()给出方法的调用序列,一直到异常的产生位置。finally语句 不论在try代码段是否产生异常,finally 后的程序代码段都会被执行。通常在这里释放内存以外的其他资源。注意事项 如果并列有多个catch语句捕获多个异常,则一般的异常类型放在后面,特殊的放在前面。25BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
29、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学生成异常对象 异常对象由谁生成呢?26BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
30、BBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学生成异常对象 三种方式 由Java虚拟机生成;由Java类库中的某些类生成;在自己写的程序中生成和抛出异常对象。抛出异常对象都是通过throw语句实现,异常对象必须是Throwable或其子类的实例:throw new ThrowableObject();ArithmeticException e=new ArithmeticException();throw e;27BBBB
31、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学例:生成异常对象 下面看一个生成和抛出异常对象的例子。28BBBBBBBBBBBBBBBBBBBBBBBBBBB
32、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:生成异常对象class ThrowTestpublic static void main(String args)try throw new ArithmeticException();catch(A
33、rithmeticException ae)System.out.println(ae);try throw new ArrayIndexOutOfBoundsException();catch(ArrayIndexOutOfBoundsException ai)System.out.println(ai);try throw new StringIndexOutOfBoundsException();catch(StringIndexOutOfBoundsException si)System.out.println(si);BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
34、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM例:生成异常对象 运行结果java.lang.ArithmeticExceptionjava.lang.ArrayIndexOutOfBoundsExceptionjava.lang.StringIndexOutOf
35、BoundsExceptionBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学声明自己的异常类 除使用系统预定义的异常类外,用户还可声明自己的异常类31
36、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学声明自己的异常类 自定义的所有异常类都必须是Exception的子类 声明语法如下public clas
37、s MyExceptionName extends SuperclassOfMyException public MyExceptionName()super(Some string explaining the exception);32BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
38、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学结束语 这一节介绍了异常的处理机制:try catch finally语句,声明异常类、构造和抛出异常对象33BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
39、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMC+语言程序设计(第4版),郑莉,清华大学34BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava
40、语言程序设计(第2版),郑莉,清华大学I/O(Input/Output)流 在Java中将信息的输入与输出过程抽象为I/O流 输入是指数据流入程序 输出是指数据从程序流出 一个流就是一个从源流向目的地的数据序列35BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
41、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学预定义的I/O流类 从流的方向划分 输入流 输出流 从流的分工划分 节点流 处理流 从流的内容划分 面向字符的流 面向字节的流36BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
42、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学java.io包的顶级层次结构 面向字符的流:专门用于字符数据 面向字节的流:用于一般目的37面向字节的流面向字符的流BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMM
43、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学面向字符的流 针对字符数据的特点进行过优化,提供一些面向字符的有用特性。38BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
44、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学面向字符的流 源或目标通常是文本文件;实现内部格式和文本文件中的外部格式之间转换 内部格式:16-bit char 数据类型 外部格式:UTF(Universal character set Transformation Format):很多人称之为Universal Text Format 包括ASCII 码及非ASCII 码字符,比如:斯拉夫(Cyrillic)字符,希腊字符,亚洲字符等39BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
45、BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学面向字符的抽象流类Reader和Writer java.io包中所有字符流的抽象超类。Reader提供了输入字符的API。Writer提供了输出字符的API。它们的子类又可分为两大类
46、节点流:从数据源读入数据或往目的地写出数据;处理流:对数据执行某种处理。多数程序使用这两个抽象类的一系列子类来读入/写出文本信息 例如FileReader/FileWriter用来读/写文本文件。40BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
47、MMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学41面向字符的流阴影部分为节点流,其他为处理流BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava
48、语言程序设计(第2版),郑莉,清华大学42 数据源或目标中含有非字符数据,必须用字节流来输入/输出 通常被用来读写诸如图片、声音之类的二进制数据 绝大多数数据是被存储为二进制文件的,通常二进制文件要比含有相同数据量的文本文件小得多面向字节的流BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
49、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学43 是用来处理字节流的抽象基类,程序使用这两个类的子类来读写字节信息 分为两部分 节点流 处理流面向字节的抽象流类InputStream和OutputStream BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
50、MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMJava语言程序设计(第2版),郑莉,清华大学标准输入输出流对象 System类的静态成员变量 包括 System.in:InputStream类型的,代表标准输入流,默认状态对应于键盘输入。System.out:PrintStream类型的,代表标准输出流,默认状态对应于显示器输出。System.err:PrintStream类型的,代表标准错误信息输出流,默认状态对应于显示器输出。45BBBBBBBBBBBBBBBBBBBBBBBBBBB