JAVA教程 第四讲 Java的例外处理和I-O流

上传人:野鹰 文档编号:3037854 上传时间:2017-07-30 格式:DOC 页数:18 大小:72.50KB
返回 下载 相关 举报
JAVA教程 第四讲 Java的例外处理和I-O流_第1页
第1页 / 共18页
JAVA教程 第四讲 Java的例外处理和I-O流_第2页
第2页 / 共18页
JAVA教程 第四讲 Java的例外处理和I-O流_第3页
第3页 / 共18页
JAVA教程 第四讲 Java的例外处理和I-O流_第4页
第4页 / 共18页
JAVA教程 第四讲 Java的例外处理和I-O流_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《JAVA教程 第四讲 Java的例外处理和I-O流》由会员分享,可在线阅读,更多相关《JAVA教程 第四讲 Java的例外处理和I-O流(18页珍藏版)》请在金锄头文库上搜索。

1、41 什么是例外例外就是在程序的运行过程中所发生的异常事件,它中断指令的正常执行。Java 中提供了一种独特的处理例外的机制,通过例外来处理程序设计中出现的错误。411 例外示例【例 4-1】import java.io.*;class ExceptionDemo1public static void main( String args )FileInputStream fis = new FileInputStream( text );int b;while( (b=fis.read()!=-1 )System.out.print( b );fis.close( );查看编译结果【例 4-2

2、】class ExceptionDemo2public static void main( String args )int a = 0;System.out.println( 5/a );运行结果C:javac ExceptionDemo2.javaC:java ExceptionDemo2java.lang.ArithmeticException: / by zero atExceptionDemo2.main(ExceptionDemo2.java:4)因为除数不能为 0,所以在程序运行的时候出现了除 0 溢出的异常事件。为什么有的例外在编译时出现,而有的例外是在运行时出现的?让我们继续

3、学习java 的例外处理机制。412 例外处理机制抛弃(throw)例外:在 Java 程序的执行过程中,如果出现了异常事件,就会生成一个例外对象。生成的例外对象将传递给 Java 运行时系统,这一例外的产生和提交过程称为抛弃(throw)例外两种处理例外的机制: 捕获例外:当 Java 运行时系统得到一个例外对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一例外的代码。找到能够处理这种类型的例外的方法后,运行时系统把当前例外对象交给这个方法进行处理,这一过程称为捕获(catch)例外。这是积极的例外处理机制。如果Java 运行时系统找不到可以捕获例外的方法,则运行时系统将终止,相应的 Ja

4、va 程序也将退出。 声明抛弃例外:如果一个方法并不知道如何处理所出现的例外,则可在方法声明时,声明抛弃(throws)例外。这是一种消极的例外处理机制。413 例外类的层次在 jdk 中,每个包中都定义了例外类,而所有的例外类都直接或间接地继承于 Throwable 类。 图 4-1 为 jdk 中例外类的继承关系。java 中的例外类可分为两大类:Error动态链接失败,虚拟机错误等,通常 Java 程序不应该捕获这类例外,也不会抛弃这种例外。Exception1)运行时例外: 继承于 RuntimeException 的类都属于运行时例外,例如算术例外(除零错)、数组下标越界例外等等。由

5、于这些例外产生的位置是未知的,Java 编译器允许程序员在程序中不对它们做出处理。 2)非运行时例外: 除了运行时例外之外的其他由 Exception 继承来的例外类都是非运行时的例外,例如FileNotFoundException(文件未找到例外)。Java 编译器要求在程序中必须处理这种例外,捕获例外或者声明抛弃例外。42 例外的处理java 语言中有两种例外处理机制:捕获例外和声明抛弃例外。下面我们做详细介绍。421 捕获例外捕获例外是通过 try-catch-finally 语句实现的。try.catch( ExceptionName1 e ).catch( ExceptionName

6、2 e ).finally. try捕获例外的第一步是用 try选定捕获例外的范围,由 try 所限定的代码块中的语句在执行过程中可能会生成例外对象并抛弃。 catch每个 try 代码块可以伴随一个或多个 catch 语句,用于处理 try 代码块中所生成的例外事件。catch 语句只需要一个形式参数指明它所能够捕获的例外类型,这个类必须是 Throwable 的子类,运行时系统通过参数值把被抛弃的例外对象传递给 catch 块。在 catch 块中是对例外对象进行处理的代码,与访问其它对象一样,可以访问一个例外对象的变量或调用它的方法。getMessage( )是类 Throwable 所

7、提供的方法,用来得到有关异常事件的信息,类 Throwable 还提供了方法 printStackTrace( )用来跟踪异常事件发生时执行堆栈的内容。例如:try.catch( FileNotFoundException e )System.out.println( e );System.out.println( message: +e.getMessage() );e.printStackTrace( System.out );catch( IOException e )System.out.println( e );catch 语句的顺序:捕获例外的顺序和 catch 语句的顺序有关,当

8、捕获到一个例外时,剩下的 catch 语句就不再进行匹配。因此,在安排 catch 语句的顺序时,首先应该捕获最特殊的例外,然后再逐渐一般化。也就是一般先安排子类,再安排父类。 finally捕获例外的最后一步是通过 finally 语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在 try 代码块中是否发生了异常事件,finally 块中的语句都会被执行。422 声明抛弃例外1声明抛弃例外如果在一个方法中生成了一个例外,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃例外,使得例外对象可以从调用栈向后

9、传播,直到有合适的方法捕获它为止。声明抛弃例外是在一个方法声明中的 throws 子句中指明的。例如:public int read () throws IOException.throws 子句中同时可以指明多个例外,之间由逗号隔开。例如: public static void main(String args) throws IOException,IndexOutOfBoundsException 2抛出例外抛出例外就是产生例外对象的过程,首先要生成例外对象,例外或者由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。在方法中,抛出例外对象是通过 throw语句实现的。例如:IOE

10、xception e=new IOException();throw e ;可以抛出的例外必须是 Throwable 或其子类的实例。下面的语句在编译时将会产生语法错误:throw new String(want to throw);43 自定义例外类的使用自定义例外类必须是 Throwable 的直接或间接子类。注意:一个方法所声明抛弃的例外是作为这个方法与外界交互的一部分而存在的。所以,方法的调用者必须了解这些例外,并确定如何正确的处理他们。44 I/O 流概述输入/输出处理是程序设计中非常重要的一部分,比如从键盘读取数据、从文件中读取数据或向文件中写数据等等。Java 把这些不同类型的输

11、入、输出源抽象为流(stream),用统一接口来表示,从而使程序简单明了。Jdk 提供了包 java.io,其中包括一系列的类来实现输入/输出处理。下面我们对 java.io 包的内容进行概要的介绍。441 I/O 流的层次1字节流:从 InputStream 和 OutputStream 派生出来的一系列类。这类流以字节(byte)为基本处理单位。 InputStream、OutputStream FileInputStream、FileOutputStream PipedInputStream、PipedOutputStream ByteArrayInputStream、ByteArray

12、OutputStream FilterInputStream、FilterOutputStream DataInputStream、DataOutputStream BufferedInputStream、BufferedOutputStream2字符流:从 Reader 和 Writer 派生出的一系列类,这类流以 16 位的 Unicode 码表示的字符为基本处理单位。 Reader、Writer InputStreamReader、OutputStreamWriter FileReader、FileWriter CharArrayReader、CharArrayWriter PipedR

13、eader、PipedWriter FilterReader、FilterWriter BufferedReader、BufferedWriter StringReader、StringWriter3对象流 ObjectInputStream、ObjectOutputStream4其它 文件处理:File、RandomAccessFile; 接口DataInput、DataOutput、ObjectInput、ObjectOutput;442 InputStream 和 OutputStream1InputStream 从流中读取数据:int read( ); /读取一个字节,返回值为所读的字

14、节int read( byte b ); /读取多个字节,放置到字节数组 b 中,通常/读取的字节数量为 b 的长度,返回值为实际/读取的字节的数量int read( byte b , int off, int len ); /读取 len 个字节,放置/到以下标 off 开始字节/数组 b 中,返回值为实/际读取的字节的数量int available( ); /返回值为流中尚未读取的字节的数量long skip( long n ); /读指针跳过 n 个字节不读,返回值为实际/跳过的字节数量 关闭流:close( ); /流操作完毕后必须关闭 使用输入流中的标记:void mark( int

15、 readlimit ); /记录当前读指针所在位置,readlimit/表示读指针读出 readlimit 个字节后/所标记的指针位置才失效void reset( ); /把读指针重新指向用 mark 方法所记录的位置boolean markSupported( );/当前的流是否支持读指针的记录功能有关每个方法的使用,详见 java API。2OutputStream 输出数据:void write( int b ); /往流中写一个字节 bvoid write( byte b ); /往流中写一个字节数组 bvoid write( byte b , int off, int len ); /把字节数组 b 中从/下标 off 开始,长度为 len 的字节写入流中 flush( ) /刷空输出流,并输出所有被缓存的字节由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。 关闭流:close( ); /流操作完毕后必须关闭443 I/O 中的例外进行 I/O 操作时可能会产生 I/O 例外,属于非运行时例外,应该在程序中处理。如:FileNotFoundException, EOFException, IOException45 文件处理I/O 处理中,最常见的是对文件的操作,java.i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号