第六章 异常处理与多线程_第1页
第六章 异常处理与多线程_第2页
第六章 异常处理与多线程_第3页
第六章 异常处理与多线程_第4页
第六章 异常处理与多线程_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第六章 异常处理与多线程2本章重点n了解异常和异常分类n理解异常处理机制ntry-cathch-finallyn自定义异常n多线程36.1 异常处理基础n含义:程序在运行过程中所发生的错误事件(如数组越界、文件操作时未找到文件、除法溢出等),而这些错误在设计时不能准确地识别出但又可能会发生或者不会发生。n正确理解程序设计中的三种错误: 语法错误(编译时的错误);逻辑错误(运行时的错误); 异常错误(运行时的错误但取决于执行环境)。46.1异常处理基础nJava通过面向对象的方法来处理异常,引入了异常类(Exception),对于程序运行时出现的异常事件,有其对应的错误处理机制.n每当程序运行

2、过程中发生一个系统可识别的运行错误时,系统就会产生该异常类的一个对象并作出处理,确保不对系统造成破坏,保证程序运行的安全性和强健性.56.2 异常处理的优点q异常处理的优点(OOP方式的错误处理编程):能将“错误处理”代码与“常规功能”代码相分离;能将错误沿调用栈向上传播;能按错误类型和错误对象分组,分门别类地加以处理。允许类似于 Switch Case 语句的分类过滤错误例外q非结构化错误处理的缺点代码很难阅读、调试和维护容易忽视错误66.2 异常处理的优点ThrowableErrorExceptionObjectAWTExceptionRuntimeExceptionIOException

3、7常见常见RuntimeExceptionRuntimeException本类异常一般不用特意处理,只要细心可以避免!本类异常一般不用特意处理,只要细心可以避免!8常见非运行时异常常见非运行时异常 本类异常必须处理,我们所指的异常处理就是本类异常必须处理,我们所指的异常处理就是针对这样的异常。针对这样的异常。96.3 异常处理机制n异常处理机制:主要体现在“抛出异常”并“捕获异常”这两个层次。n抛出异常:当程序执行过程中产生异常时,运行系统将抛出异常类对象(它代表某一异常类型的错误事件)。n捕获异常:用户程序或运行系统可以捕获该异常类对象(在函数的调用栈中查找能处理此异常事件的程序为止)并相应

4、地给出处理的方法(代码)。n如何捕获异常:采用try、catch、 finally语句块。106.3 异常处理机制捕获异常ntry语句块:它指定可能会产生异常的语句范围,也即为catch规定异常捕获的语句范围。ncatch语句块:它指明需要捕获异常事件的类型并相应地给出处理的方法(代码)。nfinally:它指定一代码块,不管是否有异常产生或是否捕获住该异常,程序都从此处继续向后执行。从而达到提供统一的出口(如关闭文件、清除系统资源等)。116.3 异常处理机制捕获异常ntry/catch异常处理代码块的基本形式try /监视 可能发生异常的代码块; catch(异常类型 异常对象名)/捕获并

5、处理异常异常处理代码块; 【finally 必须执行的代码;】当抛出一个异常时,异常会由相应的catch语句捕获并处理.与一个try相关的catch语句可以有多个,构成多重catch 语句,异常类型决定了要执行哪个catch语句. 如果没有抛出异常,那么try代码块就会结束,并且会跳过它的所有catch语句,从最后一个catch后面的第一个语句继续执行. 126.3 异常处理机制捕获异常例例 使用try/catch进行异常处理的情况.public class ExceptionExam0 public static void main(String args) int i,a; try / 监

6、视一代码块 i=0;a=42/i;return; catch (ArithmeticException e) /捕获一个被零除异常System.out.println(被零除); 136.3 异常处理机制捕获异常n与一个try相关的catch语句可以有多个.每一个catch语句捕获一个不同类型的异常.某些情况,由单个代码段可能引起多个异常.处理这种情况时就需要定义两个或更多的catch子句,每个子句捕获一种类型的异常.n当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句被执行.当一个catch语句执行以后,其他的子句被忽略,程序从try/catch块后的代码开始继续执行.

7、146.3 异常处理机制捕获异常例例 捕获两种不同类型的异常public class ExceptionExam3 public static void main(String args) try int i = args.length;System.out.println(i =+i);int j=5/i;int k= 1,2,3 ;k5=0;catch(ArithmeticException e) System.out.println(被零除: + e); catch(ArrayIndexOutOfBoundsException e) System.out.println(Array in

8、dex out of bound exception: + e); System.out.println(执行catch块后的语句块);156.4异常处理机制声明抛弃异常n声明抛弃异常是在一个方法声明中的throws子句中指明的.n包含throws子句的方法的基本形式修饰符 返回类型 方法名(参数1,参数2,)throws 异常列表例如,public int read () throws IOExceptionnthrows子句中同时可以指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们.例如,public static void main(String args) throws

9、 IOException, IndexOutOfBoundsException 166.5 手动抛弃异常n手动抛弃异常对象是通过throw语句实现的,但可以抛弃的异常必须是Throwable或其子类的实例.n其基本形式如下:throw 异常名;nthrow关键字主要是用在try块中,用来说明已经发生的异常情况.throw关键字后面跟随一个从类Throwable中派生的异常对象,用来说明发出的异常类型.throw语句促使程序立即停止运行,并且重复执行最近能够处理指定对象的catch语句.如果异常在程序的其他地方产生,throw语句也可以放在try语句的后面.为了把异常处理控制传递给更高层的处理模

10、块,还可以对截获的异常对象再一次实施throw操作.176.6 自定义异常n若要建立自己的异常类型,只要定义Exception的一个子类就可以了,子类不需要实际执行什么它们在类型系统中的存在允许把它们当成异常使用.n自定义异常的基本形式如下所示:class 自定义异常 extends 父异常类名 类体; 186.6 自定义异常例例自定义异常示例class ExceptionExam7_1 extends Exception private int show;ExceptionExam7_1 (int a)show=a;public String toString()return Excepti

11、onExam7_1 ;public class ExceptionExam7static void caculate(int a) throws ExceptionExam7_1System.out.println(对+ a +已经进行过相应的操作);if(a100) throw new ExceptionExam7_1 (a);196.6 自定义异常System.out.println(执行该算法正常退出!);public static void main(String args)trycaculate(1);caculate(1000);catch (ExceptionExam7_1 e)

12、System.out.println(捕获了异常 + e);206.7 多线程216.8 线程的生命周期n创建状态n就绪状态n运行状态n阻塞状态n终止状态226.8 线程的生命周期236.8 线程的生命周期24256.9 多线程的实现n自定义线程的创建l声明一个 Thread 类的子类,并覆盖 run() 方法。 class mythread extends Thread public void run( ) /* 覆盖该方法*/ l声明一个实现 Runnable 接口的类,并实现 run() 方法。 class mythread implements Runnable public void

13、 run( ) /* 实现该方法*/ 266.9 多线程的实现n创建线程对象线程名 对象名new 线程名(实际参数);n启动对象名.start();n运行对象名.run();n阻塞276.9 多线程的实现n线程的控制286.10 线程的管理296.10 线程的管理30n线程互斥的实现机制 6.10 线程的管理316.10 线程的管理n同步方法public synchronized 返回值类型 方法名(参数);326.10 线程的管理n同步块public 返回值类型 方法名(参数); synchronized(this);336.10 线程的通信346.10 线程的通信35小结nJDK API 中定义的系统异常对象类型nJAVA应用程序中异常的处理方式n创建用户类型异常对象的方法nJVM的异常对象处理机制n对线程的执行状态进行控制和调整n在一个Java程序中创建多个并发执行的线程n将多个并发执行线程进行同步处理36作业完成本章复习题public class TestSumpublic static void main(String args)Thread1 t1=new Threa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论