Java编程 第五章.ppt
《Java编程 第五章.ppt》由会员分享,可在线阅读,更多相关《Java编程 第五章.ppt(102页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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();异常示例C:javac ExceptionDemol.javaExceptionDemo1.java:6:Exception java.io.Fi
2、leNotFoundException must be caught,or it must be declared in the throws clause of this method.FileInputStream fis=new FileInputStream(text);ExceptionDemo1.java:8:Exception java.io.IOException must be caught,or it must be declared in the throws clause of this method.while(b=fis.read()!=-1)2 errors异常示
3、例class ExceptionDemo2public static void main(String args )int a=0;System.out.println(5/a);异常示例C:javac ExceptionDemo2.javaC:java ExceptionDemo2java.lang.ArithmeticException:/by zeroat ExceptionDemo2.main(ExceptionDemo2.java:4)异常处理机制在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给Java运行时系统,这一异常的产生和提交过程称
4、为抛弃(throw)异常。异常处理机制当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。异常(Throwable)分类Error动态链接失败,虚拟机错误等,通常Java程序不应该捕获这类异常,也不会抛弃这种异常。Exception运行时异常继承于RuntimeException。Java编译器允许程序不对它们做出处理。其他异常除了运行时异常之外的其他由Except
5、ion继承来的异常类。Java编译器要求程序必须捕获或者声明抛弃这种异常。AWTExceptionThrowableErrorExceptionRuntimeExceptionIOExceptionLinkageErrorVirtualMachineErrorAWTErrorArithmeticExceptionIndexOutOfBounds.InterruptedExceptionFileNotFoundExceptionEOFException.捕获异常捕获异常是通过try-catch-finally语句实现的。try.catch(ExceptionName1 e).catch(Exce
6、ptionName2 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语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排ca
8、tch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。finally捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。try int b=0;System.out.println(5/b);catch(ArithmeticException e)finally if(fis!=null)System.out.println(“closing FileInputStream”);else S
9、ystem.out.println(“FileInputStream not open”);声明抛弃异常如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止。声明抛弃异常声明抛弃异常是在一个方法声明中的throws子句中指明的。例如:public int read()throws IOException.throws子句中同时可以指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们:public static void main(String args)
10、throws IOException,IndexOutOfBoundsException 抛弃异常抛弃异常首先要生成异常对象,异常或者由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。抛弃异常对象是通过throw语句实现的。IOException e=new IOException();throw e;可以抛弃的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:throw new String(want to throw);异常类的使用自定义异常类必须是Throwable的直接或间接子类一个方法所声明抛弃的异常是作为这个方法与外界交互的一部分而存在的。方法
11、的调用者必须了解这些异常,并确定如何正确的处理他们。异常类的使用FileInputStream 的APIpublic FileInputStream(String name)throws FileNotFoundException异常示例import java.io.*;class ExceptionDemo1public static void main(String args )FileInputStream fis=new FileInputStream(text);异常类的使用积极处理方式:import java.io.*;class ExceptionDemo1public stat
12、ic void main(String args )try FileInputStream fis=new FileInputStream(text);catch(FileNotFoundException e)异常类的使用消极处理方式:import java.io.*;class ExceptionDemo1public static void main(String args )throws FileNotFoundException FileInputStream fis=new FileInputStream(text);异常类的使用如果采用消极处理方式,则由调用该方法的方法进行处理;
13、但是调用该方法的方法也可以采用消极和积极两种处理方式,一直传递到Java运行环境.异常类的使用运行时异常则表示由运行时系统所检测到的程序设计问题或者API的使用不当问题,它可能在程序的任何地方出现:(1)对于运行时异常,如果不能预测它何时发生,程序可以不做处理,而是让Java虚拟机去处理它。(2)如果程序可以预知运行时异常可能发生的地点和时间,则应该在程序中进行处理,而不应简单的把它交给运行时系统。异常类的使用(3)在自定义异常类时,如果它所对应的异常事件通常总是在运行时产生的,而且不容易预测它将在何时、何处发生,则可以把它定义为运行时异常,否则应定义为非运行时异常。模拟考题模拟考题Quest
14、ion 60)Given the following code import java.io.*;public class Ppvgpublic static void main(String argv)Ppvg p=new Ppvg();p.fliton();public int fliton()try模拟考题模拟考题 FileInputStream din=new FileInputStream(Ppvg.java);din.read();catch(IOException ioe)System.out.println(flytwick);return 99;finally System.
15、out.println(fliton);return-1;模拟考题模拟考题 Assuming the file Ppvg.java is available to be read which of the following statements are true if you try to compile and run the program?1)The program will run and output only flytwick2)The program will run and output only fliton模拟考题模拟考题 3)The program will run a
16、nd output both fliton and flytwick4)An error will occur at compile time because the method fliton attempts to return two values模拟考题模拟考题 Answer to Question 60)2)The program will run and output only flitonThis question tests your knowledge of the principle that the finally clause will almost always ru
17、n.输入/输出处理java.io包字节流从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。字符流从Reader和Writer派生出的一系列类,这类流以16位的Unicode码表示的字符为基本处理单位。字节流InputStream、OutputStreamFileInputStream、FileOutputStreamPipedInputStream、PipedOutputStreamByteArrayInputStream、ByteArrayOutputStreamFilterInputStream、FilterOutputStrea
18、mDataInputStream、DataOutputStreamBufferedInputStream、BufferedOutputStream字符流Reader、WriterInputStreamReader、OutputStreamWriterFileReader、FileWriterCharArrayReader、CharArrayWriterPipedReader、PipedWriterFilterReader、FilterWriterBufferedReader、BufferedWriterStringReader、StringWriter对象流ObjectInputStream、
19、ObjectOutputStream其它文件处理File、RandomAccessFile;接口DataInput、DataOutput、ObjectInput、ObjectOutput;I/O处理的类层次可参考帮助文档,查看带input、output字样的类的继承关系,以及带reader、writer字样的类的继承关系。InputStream从流中读取数据int read();int read(byte b );int read(byte b,int off,int len);int available();long skip(long n);InputStream关闭流close();使用
20、输入流中的标记void mark(int readlimit);void reset();boolean markSupported();OutputStream输出数据void write(int b);void write(byte b );void write(byte b,int off,int len);flush()刷空输出流,并输出所有被缓存的字节。关闭流close();文件处理File、FileInputStream、FileOutputStream、RamdomAccessFile文件描述类File提供了一种与机器无关的方式来描述一个文件对象的属性。文件的生成public F
21、ile(String path);public File(String path,String name);public File(File dir,String name);文件描述文件名的处理String getName();/*得得到到一一个个文文件件的的名名称称(不不包包括路径)括路径)*/String getPath();/得到一个文件的路径名得到一个文件的路径名String getAbsolutePath();/*得得到到一一个个文文件件的的绝绝对对路径名路径名*/String getParent();/*得到一个文件的上一级目得到一个文件的上一级目录名录名*/String ren
22、ameTo(File newName);/*将当前文件将当前文件名更名为给定文件的完整路径名更名为给定文件的完整路径*/文件描述文件属性测试boolean exists();/*测试当前测试当前File对象所指示的对象所指示的文件是否存在文件是否存在*/boolean canWrite();/测试当前文件是否可写测试当前文件是否可写boolean canRead();/测试当前文件是否可读测试当前文件是否可读boolean isFile();/*测试当前文件是否是文件测试当前文件是否是文件(不是目录)(不是目录)*/boolean isDirectory();/*测测试试当当前前文文件件是是否
23、否是是目目录录*/文件描述普通文件信息和工具long lastModified();/*得到文件最近一次修改得到文件最近一次修改的的时间时间*/long length();/得到文件的长度,以字节为单位得到文件的长度,以字节为单位boolean delete();/删除当前文件删除当前文件目录操作boolean mkdir();/*根据当前对象生成一个由根据当前对象生成一个由该该对象指定的路径对象指定的路径*/String list();/列出当前目录下的文件列出当前目录下的文件文件处理例子例10.1 (参见FileTest.java文件)文件处理例子列出目录中与某种模式相匹配的文件:publ
24、ic String list(FilenameFilter filter);在接口 FilenameFilter中定义的方法只有:boolean accept(File dir,String name);例10.2(参见FileFilterTest.java文件)文件的顺序处理类FileInputStream和FileOutputStream用来进行文件I/O处理,由它们所提供的方法可以打开本地主机上的文件,并进行顺序的读/写。FileInputStream fis;try fis=new FileInputStream(text);System.out.print(content of te
25、xt is:);int b;while(b=fis.read()!=-1)System.out.print(char)b);catch(FileNotFoundException e)System.out.println(e);catch(IOException e)System.out.println(e);过滤流/过程流处理流包装类过程流在其它流之上,完成排序、变换等操作。过程流也被称做过滤流。当你需要改变输入流的原始数据时,你可以将一个过滤输入流连接到一个原始的输入流上。用过滤流将原始数据变换成你需要的格式。过滤流在读/写数据的同时可以对数据进行处理将其他数据类型转换成字节数组,然后调用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java编程 第五章 Java 编程 第五
限制150内