《Java程序设计课件第六章异常处理递归与单体程序设计方法.ppt》由会员分享,可在线阅读,更多相关《Java程序设计课件第六章异常处理递归与单体程序设计方法.ppt(30页珍藏版)》请在金锄头文库上搜索。
1、Java语言程序设计语言程序设计第六章第六章 异常处理和递归异常处理和递归讲授人:傅晓阳 教授上章回顾上章回顾n StringString与与StringBufferStringBuffer的区别是什么?的区别是什么?n举例说明举例说明StringString中处理字符串的成员方法有中处理字符串的成员方法有哪些?哪些?DavidFuDavidFu本章课程纲要本章课程纲要抛出异常与自定义异常处理类抛出异常与自定义异常处理类异常处理类型与捕获异常结构异常处理类型与捕获异常结构DavidFuDavidFu本课程纲要本课程纲要捕获异常捕获异常异常处理的类型异常处理的类型 异常处理类型异常处理类型Dav
2、idFuDavidFu异常处理的类型异常处理的类型 Java异常类结构异常类结构 DavidFuDavidFu异常处理的类型异常处理的类型nError类及其子类主要用来描述一些很难恢复的错类及其子类主要用来描述一些很难恢复的错误,如内存越界。这类错误一般不期望用户程序来误,如内存越界。这类错误一般不期望用户程序来处理,即使程序员有能力处理这种错误,也还是交处理,即使程序员有能力处理这种错误,也还是交给系统处理为好。给系统处理为好。nRuntimeException用来描述程序员在设计或用来描述程序员在设计或编写过程中不正确所引发的异常,如数组越界、错编写过程中不正确所引发的异常,如数组越界、错
3、误的强制类型转换等。误的强制类型转换等。 DavidFuDavidFu异常处理的类型异常处理的类型n在在Java中中Error和和RuntimeException及其子类又称为及其子类又称为非检查异常(非检查异常(unchecked),对于这类异常,编译器不),对于这类异常,编译器不做检查做检查 n在编译时检查是否会出现异常情况的称为受检异常在编译时检查是否会出现异常情况的称为受检异常(checked)。)。n对于任何方法来说,如果它调用的方法抛出了某一检查类型的异常,该调用者就必需捕获这一异常或者也声明抛出该类异常(或该异常的父类),编译器对此要进行检查。 DavidFuDavidFu异常处
4、理的类型非检查异常异常处理的类型非检查异常异常类异常类的含义ArithmeticException当出现异常的运算条件时,抛出此异常。ArrayStoreException试图将错误类型的对象存储到一个对象数组时抛出的异常。ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。ClassCastException试图将对象强制转换成不是其子类的实例时抛出该异常。IllegalArgumentException表明向方法传递了一个不合法或不正确的参数时抛出的异常。DavidFuDavidFu异常处理的类型非
5、检查异常异常处理的类型非检查异常IllegalThreadStateException指示线程没有处于请求操作所要求的适当状态时抛出的异常。IndexOutOfBoundsException某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出的异常。NegativeArraySizeException如果应用程序试图创建大小为负的数组,则抛出该异常。NullPointerException当需要引用一个对象时,应用程序试图使用 null对象,抛出该异常。DavidFuDavidFu异常处理的类型非检查异常异常处理的类型非检查异常NumberFormatException当应用程序试图将字
6、符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。SecurityException由安全管理器抛出的异常,指示存在安全侵犯。StringIndexOutOfBoundsException此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。对诸如 charAt 的一些方法,当索引等于字符串的大小时,也会抛出该异常。DavidFuDavidFu异常处理的类型检查异常异常处理的类型检查异常异常类异常类的含义IOException当发生某种I/O异常时,抛出此异常。EOFException当输入过程中意外到达文件或流的末尾时,抛出此异常。此异常主要被数据输入流
7、用来表明到达流的末尾。而其他输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。FileNotFoundException当试图打开指定路径名表示的文件失败时,抛出此异常。InterruptedIOExceptionI/O操作已中断时,抛出此异常。抛出InterruptedIOException指示输入或输出传输已经终止,原因是执行此操作的线程中断。DavidFuDavidFu异常处理的类型检查异常异常处理的类型检查异常SQLException提供关于数据库访问错误或其他错误信息的异常。ConnectException试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。Malf
8、ormedURLException出现了错误的URL时抛出该异常。ProtocolException抛出此异常指示在底层协议中存在错误,如TCP错误。UnknownHostException指示主机IP地址无法确定而抛出的异常。DavidFuDavidFu本课程纲要本课程纲要抛出异常抛出异常捕获异常捕获异常 异常处理的类型异常处理的类型异常处理类型异常处理类型DavidFuDavidFu异常处理结构异常处理结构n抛出异常抛出异常n捕获异常捕获异常n异常处理结构异常处理结构n trycatch(单catch)n trycatch(多catch)n DavidFuDavidFu异常处理结构异常处理
9、结构ntrycatch语句块语句块ntrycatch语句块分为语句块分为try语句块和语句块和catch语语句块,其结构如下:句块,其结构如下:try /try语句块,可能产生异常的程序代码catch(异常类型 e) / catch语句块,对异常进行处理参见实例实例5-2 TestTDavidFuDavidFu异常处理结构异常处理结构n多多catch语句块语句块 try /try语句块,可能产生异常的程序代码catch(异常类型1 e1) / catch语句块,对异常进行处理catch(异常类型2 e2)/ catch语句块,对异常进行处理 catch(异常类型n en) /捕获并处理异常/
10、catch语句块,对异常进行处理参见实例实例5-3 TestTryMDavidFuDavidFu异常处理结构异常处理结构ntrycatchfinally语句块语句块try/try语句块,可能产生异常的程序代码catch(异常类型1 e1) / catch语句块,对异常进行处理 catch(异常类型n en) / catch语句块,对异常进行处理finally /无论异常是否发生,try/catch后一定要执行的语句参见实例实例5-4 TestFDavidFuDavidFu本章课程纲要本章课程纲要抛出异常与自定义异常处理类抛出异常与自定义异常处理类异常处理类型与捕获异常结构异常处理类型与捕获异常
11、结构DavidFuDavidFu本课程纲要本课程纲要自定义异常处理类自定义异常处理类抛出异常抛出异常抛出异常与自定义异常处理类抛出异常与自定义异常处理类综合练习综合练习DavidFuDavidFu抛出异常抛出异常nthrows语句间接抛出异常语句间接抛出异常n在方法的定义中利用在方法的定义中利用throws关键字声明异常类关键字声明异常类型而间接抛出异常。型而间接抛出异常。 nthrows语句形式如下:n方法说明throws 异常类列表nn声明语句n执行语句nn参见实例实例5-5 TestTDavidFuDavidFu抛出异常抛出异常nthrow语句抛出异常语句抛出异常nthrow语句形式如下
12、:语句形式如下:nthrow 异常类对象异常类对象n所有生成的异常对象必须是所有生成的异常对象必须是Throwable或其子或其子类的实例类的实例 n含有含有throw语句的方法,需要在方法头定义中语句的方法,需要在方法头定义中增加以下内容:增加以下内容:n访问控制说明符访问控制说明符 类型类型 方法名称(参数列表)方法名称(参数列表)throws 异常类名列表异常类名列表n 方法体方法体 n参见实例参见实例5-6TestThrowException DavidFuDavidFu本课程纲要本课程纲要自定义异常处理类自定义异常处理类抛出异常抛出异常抛出异常与自定义异常处理类抛出异常与自定义异常处
13、理类综合练习综合练习DavidFuDavidFu自定义异常处理类自定义异常处理类n自定义异常类必须是自定义异常类必须是Exception类的子类。一般类的子类。一般的声明形式如下:的声明形式如下:public Class MyExceptionName extends Exception public MyExceptionName ( ) super(“Some string explaining the exception”); DavidFuDavidFu自定义异常处理类自定义异常处理类n实例实例5-7声明当数组下标越界时抛出的异常类声明当数组下标越界时抛出的异常类IndexExcept
14、ion public class IndexException extends Exceptionpublic IndexException()super(数组下标越界!数组下标越界!);DavidFuDavidFu自定义异常处理类自定义异常处理类n在方法中抛出自定义异常处理类的异常在方法中抛出自定义异常处理类的异常public static void printarray(int b,int m) throws IndexExceptionif(m=b.length)throw new IndexException();System.out.print( +bm);DavidFuDavidF
15、u自定义异常处理类自定义异常处理类n在异常捕获结构中捕获异常在异常捕获结构中捕获异常trycatch() catch(IndexException e)System.out.println(e.toString();System.exit(-1);DavidFuDavidFu本课程纲要本课程纲要自定义异常处理类自定义异常处理类抛出异常抛出异常抛出异常与自定义异常处理类抛出异常与自定义异常处理类综合练习综合练习DavidFuDavidFu综合练习综合练习n类的成员有哪些?接口是否是类的成员类的成员有哪些?接口是否是类的成员?n控制封装性的四个访问修饰符是什么?封控制封装性的四个访问修饰符是什么?封装严格程度的顺序是什么?给出类成员访装严格程度的顺序是什么?给出类成员访问控制模式以及方式。问控制模式以及方式。n面向对象编程的三个主要特点是什么?面向对象编程的三个主要特点是什么?DavidFuDavidFu综合练习综合练习n什么是接口?举例定义什么是接口?举例定义Vehicle 接口。什接口。什么是抽象类,举例定义抽象类么是抽象类,举例定义抽象类Shape.n说出说出final修饰类、方法和域变量的特点。修饰类、方法和域变量的特点。n类变量和实例变量的区别?类方法和实例类变量和实例变量的区别?类方法和实例方法的区别?方法的区别? DavidFuDavidF