异常处理 集合框架课件

上传人:我*** 文档编号:141315781 上传时间:2020-08-06 格式:PPT 页数:47 大小:737.50KB
返回 下载 相关 举报
异常处理 集合框架课件_第1页
第1页 / 共47页
异常处理 集合框架课件_第2页
第2页 / 共47页
异常处理 集合框架课件_第3页
第3页 / 共47页
异常处理 集合框架课件_第4页
第4页 / 共47页
异常处理 集合框架课件_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《异常处理 集合框架课件》由会员分享,可在线阅读,更多相关《异常处理 集合框架课件(47页珍藏版)》请在金锄头文库上搜索。

1、异常处理、结合框架,目标,理解异常的概念 运用 try 块、catch 块和 finally 块处理异常 运用多重 catch 块处理异常 运用嵌套 try/catch 块处理异常 运用关键字 throw 和 throws 处理异常 集合框架的理解 Set 、list、map,2010-2-1,2,异常的概念,异常:应用程序在运行过程中出现的错误或非正常的意外情况,即虚拟机的通常操作中可能遇到的异常,是一种常见的运行错误。 原因:数组下标越界;控指针的访问;试图读取不 存在的文件,数学除零等 异常处理机制由编译器强制执行 Java编译器要求方法必须声明抛出可能发生的非运行时异常,但并不要求必须

2、声明抛出未捕获的运行时异常。 完全不出错是不可能的,不要刻意回避,要多想意外发生后如何去处理它!,2010-2-1,3,异常的概念,为什么用异常: 运行时发生的错误如果没有异常处理机制,程序将会终止并使所有已分配资源的状态保持不变,这样会导致资源泄露。 如:不能收回某个程序分配的内存,以供其它程序使用。,2010-2-1,4,什么是异常,public class ExceptionRaised public ExceptionRaised() public int calculate( int operand1, int operand2) int result = operand1 / op

3、erand2; return result; public static void main(String args) ExceptionRaised obj = new ExceptionRaised(); int result = obj.calculate(9, 0); System.out.println(result); ,异常情况,异 常,程序突然终止并将控制交给操作系统,在运行时发生的错误,2010-2-1,5,异常的分类,在Java语言中,“异常”可以看作是一个类,异常类的根是Throwable。Throwable是类库java.lang包中的一个类,并派生出Exception

4、类和Error类两个子类 异常类的结构: Throwable |_Error |_Exception |_RuntimeException |_其它Exception Error:Java运行系统中的内部错误以及资源耗尽的情况。 Exception:RuntimeException及其子类(编程导致的异常)、其它Exception类。,2010-2-1,6,异常的分类,Error体系 : Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程

5、序设计时,应该更关注Exception体系。 Exception体系包括RuntimeException体系和其他非RuntimeException的体系 : RuntimeException:RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。 其他非RuntimeException(IOException等等):这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的

6、错误,而是在应用环境中出现的外部错误。,2010-2-1,7,Java异常类,文件结束,EOFException,找不到文件,FileNotFoundException,I/O 异常的根类,IOException,数字转化格式异常,比如字符串到 float 型数字的转换无效,NumberFormatException,不能加载所需的类,ClassNotFoundException,方法接收到非法参数,IllegalArgumentException,数组大小小于或大于实际的数组大小,ArrayIndexOutOfBoundException,尝试访问 null 对象成员,NullPointer

7、Exception,许多 java.lang 异常的基类,RuntimeException,异常层次结构的根类,Exception,算术错误情形,如以零作除数,ArithmeticException,线程中断,InterruptedException,说 明,异 常,2010-2-1,8,异常的捕获,对于异常有两种处理方法 : 要么捕获异常。通过try catch方法,catch子句中放置处理异常的语句。 要么声明异常,也就是在方法名后面加上throws Exceptionname,., 方法本身只是抛出异常,由函数调用者来捕获异常。,2010-2-1,9,Java程序在执行过程中如出现异常,

8、会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。 当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。 如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。 对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。,异常的捕获,2010-2-1,10,手动引发异常,指定由方法引发的异常,try,finally,catch,throws,throw,处理异常,2010-2-1

9、,11,try 和 catch 块,try,catch,异常,执行 catch 后程序 继续正常运行,程序控制,引发,代码块,单 元,2010-2-1,12,try 和 catch 块,演示:示例 1,try 和 catch 块的用法,class ExceptionRaised /* 构造方法. */ public ExceptionRaised() /* * 这个方法运行时将会产生一个异常. * param operand1 除法中的分子 * param operand2 除法中的分母 * return int 返回除法的结果 */ public int calculate(int oper

10、and1, int operand2) int result = operand1 / operand2; return result; ,public class ArithmeticException /* 构造方法. */ public ArithmeticException() public static void main(String args) ExceptionRaised obj = new ExceptionRaised(); try /* 定义变量 result 以存储结果. */ int result = obj.calculate(9, 0); System.out.

11、println(result); catch (Exception e) System.err.println(“发生异常: + e.toString(); e.printStackTrace(); ,2010-2-1,13,嵌套try-catch块,有时块的一部分导致一个错误,而块本身也可能导致一个错误,必须将一个异常嵌套在另一个异常处理机制中 从内层try语句寻找与异常匹配的catch语句,如无,检查下一个,从里到外,直到最后一个catch,2010-2-1,14,嵌套 try catch 块,如果内层 try 没有相应的 catch,则检查外层 catch,class NestedExc

12、eption protected NestedException() public void test(String argumnet) try int num = Integer.parseInt(args1); /* 嵌套 try 块。 */ try int numValue = Integer.parseInt(args0); System.out.println(“args0 + “的平方是 + numValue * numValue); catch (NumberFormatException nb) System.out.println(“不是一个数字! ); catch (Arr

13、ayIndexOutOfBoundsException ne) System.out.println(“请输入数字!); /*main方法*/ public static void main(String args) NestedException obj = new NestedException(); obj.test(args0); ,因此需要嵌套 异常处理程序,2010-2-1,15,多重 catch 块,一段代码可能会生成多个异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个类型与异常类型匹配的语句 执行其中的一条 catch 语句之后,其他的 catch 语句将

14、被忽略,try . catch(ArrayIndexOutOfBoundsException e) catch(Exception e) ,2010-2-1,16,多重 catch 块,使用多重 catch 语句时,异常子类一定要位于异常父类之前 ,否则,控制权将永远传不到子类,将产生一个不能到达的代码,即产生错误,try . catch(Exception e) catch(ArrayIndexOutOfBoundsException e) ,2010-2-1,17,finally 块,finally 是java异常处理提供的另一个关键字,通俗的说finally是异常处理语句结构的一部分,表

15、示无论什么情况都要执行的模块。finally语句的主要作用是在try或catch转到其他部分前做的一些“善后”工作。比如:关闭打开的文件,释放链接、内存等系统资源。 finally语句的执行是一种无条件的操作,无论在哪种异常下都会执行,即使try或catch模块中有continue、return、break等关键字,或者是有throw语句,程序都会执行finally 语句。 有时需要清理代码,但程序已经停止运行,使用finally 块可使程序不管发生什么异常都将执行 每个try语句至少有一个catch子句或finally子句,2010-2-1,18,finally 块,try 块,finall

16、y 块,catch 块,无异常,异常,try、catch 和 finally 块的执行流程,try / 要监控错误的代码块 methodGeneratingException(); catch (Exception e) / Exception e 的异常处理程序 finally / 在 try 结束前要执行的代码块 cleanup(); ,2010-2-1,19,异常的抛出,throws语句 throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型。 throw语句 throw关键字通

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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