Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5

上传人:E**** 文档编号:89156188 上传时间:2019-05-19 格式:PPT 页数:41 大小:570.51KB
返回 下载 相关 举报
Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5_第1页
第1页 / 共41页
Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5_第2页
第2页 / 共41页
Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5_第3页
第3页 / 共41页
Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5_第4页
第4页 / 共41页
Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5》由会员分享,可在线阅读,更多相关《Java程序设计案例教程 教学课件 ppt 作者 包海山 Java程序设计案例教程-模块5(41页珍藏版)》请在金锄头文库上搜索。

1、,模块五 异常处理与多线程设计,目标 Java语言支持多线程,所谓线程,指的是程序内部的顺序控制流,线程本身并不是程序,自身不能运行,必须在程序中运行,本模块将介绍线程的构造,以及线程的同步。,学习本模块涉及哪些重要内容?,本模块导读 无论使用哪种语言进行程序设计,出错处理是非常重要的一个方面。导致异常发生的原因有很多种,比如数组越界、除数为零、访问的文件不存在等等。Java语言是使用面向对象的方法通过异常进行出错处理的,本模块将介绍什么是异常及如何处理程序中出现的异常。 Java语言支持多线程,所谓线程,指的是程序内部的顺序控制流,线程本身并不是程序,自身不能运行,必须在程序中运行,本模块将

2、介绍线程的构造,以及线程的同步。,学习本模块涉及哪些重要内容?,本模块要点 理解异常的产生和处理机制 掌握如何捕获异常、抛出异常 掌握如何构造线程并控制线程的同步,任务一 异常的产生和处理机制,知识点详解 异常的定义 异常就是在程序运行过程中出现的不正常事件,该事件会中断指令的正常执行。 异常是程序运行时遇到的任何错误情况或意外行为。下列情况都可以产生异常:程序代码或所调用的代码(如共享库)中有错误,如除数为0;操作系统资源不可用,如试图对只读文件进行写操作;公共语言运行库遇到意外情况(如无法验证代码)等。对于这些情况,应用程序可以对某些错误结果恢复到出错前的状态,而对于另一些错误,则不能恢复

3、。 在设计程序时,应考虑到可能出现的异常情况,避免由于异常导致系统崩溃的发生。处理异常情况的能力越强,则说明程序的健壮性越好。,任务一 异常的产生和处理机制,知识点详解 异常类的类层次 在Java语言中异常是一些特殊的类,其层次关系如图所示。 所有的异常类都继承于类throwable。异常类整体分为两类,一类继承于类Error,这类异常通常不由程序捕获和处理;另一类继承于Exception,在程序中大量处理的就是这类异常。在这类异常中,还分运行时异常(继承于RuntimeException)和非运行时异常,通常程序中不处理运行时异常,而是把它交给Java运行时系统。 除运行时异常的其他继承于E

4、xception的子类是非运行时异常,对于这类异常,如果程序不进行处理,可能会使程序运行得到意想不到的结果,因此Java编译器要求程序必须处理(包括捕获或声明抛弃)这类异常。,任务一 异常的产生和处理机制,知识点详解,图5-1 异常类的层次关系,任务一 异常的产生和处理机制,知识点详解 异常的处理机制 在Java程序的执行过程中,倘若出现了异常事件,就会生成一个异常对象,该对象可能由Java虚拟机生成,也可能由程序中正在进行的方法生成,包含一些指明异常事件类型和异常发生时程序运行的状态信息。 生成的异常对象将传递给Java运行时系统,通常称异常的产生和提交过程为抛出异常,对应的保留字为thro

5、w。 运行时系统得到异常对象后,就会寻找该异常的代码。系统首先从生成异常对象的代码快开始寻找,接着对方法的栈进行逐层回溯,一直到找到一个能够处理该异常的方法为止,随后,运行时系统把当前异常对象交给寻找到的方法处理,这个过程通常称为异常的捕获,对应的关键字为catch。如果Java运行时系统没有找到可以处理该异常的方法,运行时系统就会终止运行,运行的Java程序就会随之退出运行。,任务一 异常的产生和处理机制,知识点详解 例如:算术运算异常 (由除0错误导致) 完整的程序代码如下: class Test public int devide (int x,int y) i nt result=x/

6、y; return result; class ExceptionTest1 public static void main(String args) new text().devide(3,0); 【1】 System.out.println(“program is running here!“); ,任务一 异常的产生和处理机制,知识点详解 代码详解 【1】/*调用类Test对象的devide方法,并向形参x、y传递实参:3、0,传递的参数除数为0*/ 例题中由于main函数中【1】语句向“int result=x/y;”语句传递的参数y=0,即除数为0,导致程序运行时出现异常。屏幕上出现

7、如下信息: Exception in thread “main” java.lang.ArithmeticException:/by zero at Text.decide(ExceptionTest1.java:5) at ExceptionText1 .main(ExceptionTest1.java:14) 其中,“ArithmeticException”类为算术运算异常类,出现异常后,程序无法继续进行。,任务二 异常捕获,知识点详解 【案例】试题选择时异常的捕获 实现该案例的代码段如下: try if(in!=null,任务二 异常捕获,知识点详解 correctAnswer=(rea

8、d.readLine().trim(); String temp=(read.readLine().trim(); StringTokenizer token=new StringTokenizer(temp,“:“); int hour=Integer.parseInt(token.nextToken() ; int minute=Integer.parseInt(token.nextToken(); int second=Integer.parseInt(token.nextToken(); time=1000*(second+minute*60+hour*60*60); catch(Ex

9、ception e) 【1】 testContent=“没有选择试题“; 【2】 ,任务二 异常捕获,知识点详解 代码详解 程序中字符“e”指异常对象,可以用任意标识符表示,但通常习惯用字母“e”表示。 给出处理try代码块中所生成的异常事件的方法,运行时屏幕会显示出发生了怎样的异常情况。catch中的这条语句可以省略,不影响程序的继续运行,但不利于提醒用户及时发现程序中出现了怎样的异常情况。 捕获异常 下面介绍如何捕获异常。即try代码块中抛出了一个异常,接着利用catch语句输出一些与该异常相关的信息。 捕获异常就是在某个方法中对某种类型的异常对象提供了相应的处理方法,捕获异常是通过try

10、-catch-finally语句来实现的,该语句的格式如下:,任务二 异常捕获,知识点详解 try catch(ExceptionType1 exceptionobject) catch(ExceptionType2 exceptionobject) finally ,任务二 异常捕获,知识点详解 下面介绍try-catch-finally语句各部分的用法。 Try try代码块选定捕获异常的范围,try代码块所限定的语句在执行过程中可能会生成异常对象并抛出异常对象。 Catch catch语句用于处理try代码块中所生成的异常事件,而且catch语句可以是多个,catch语句带有一个形式参数

11、,参数类型指明能够捕获的异常类型,该异常类型必须是Throwable类的子类,程序运行时,系统就会通过参数值把被抛出的异常对象传递给catch代码块。 Finally finally语句为异常处理提供一个统一的出口,不管try代码块中是否发生了异常事件,finally块中的语句都会被执行。,任务二 异常捕获,知识点详解 抛出异常 例如:抛出异常的声明访问不存在的文件。 完整的程序代码如下: import java.io.*; class ExceptionTest3 public static void main(String args ) throws IOException /*throw

12、s关键字抛出异常*/ FileInputStream streamobj=new FileInputStream(“readme.txt); System.out.println(“program is running here!”) ,任务二 异常捕获,知识点详解 信息卡 异常类“IOException”为输入输出异常,是异常类“Exception”的子类。 通过throws语句声明抛出异常,这样就不用在main方法中用catch语句捕获异常,但需要注意,要想上面的程序能够运行通过,需要保证当前路径下存在readme.txt文件。如果文件不存在,throws 语句只能使程序通过编译,而不能通

13、过运行。 声明抛出异常就是在方法声明中通过throws子句指明,格式如下: returntype methodName() throws ExceptionName 其中,returntype是方法的返回类型,methodName为方法的名称,ExceptionName为抛出的异常类型。,任务二 异常捕获,知识点详解 完整的程序代码如下: class Test4 public int devide (int x,int y) throws Exception if(y0) throw new Devide2(“devide is”+y); 【4】 int result=x/y; return

14、result; class Devide2 extends Exception 【1】 public Devide2(String msg) 【2】 super(msg); 【3】,任务二 异常捕获,知识点详解 class ExceptionTest1 public static void main(String args) try new Test().devide(3,2); catch(exception e) 【5】 System.out.println(e.getMessage(); System.out.println(“program is running here!”) ,任务

15、二 异常捕获,知识点详解 代码详解 自定义异常类型,类名为Devide2,自定义的异常类必须继承Execption类。 异常类的构造方法,这个方法接受一个字符串。 调用父类的构造函数。 生成自己的异常对象,并抛出这个异常。 根据抛出的异常,生成异常对象e,并通过try-catch语句捕获住异常。屏幕显示运行结果:devide is 2。,任务三 多线程设计,子任务1 线程体的构造 知识导读 【案例】 线程体的构造、启动与访问当前线程对象名 完整的程序代码如下: class TestThread5 public static void main(String args) minthread tt

16、=new minthread(); 【2】 tt.start(); 【3】 while(true) System.out.println(“main():”+Thread.currentThread().getname(); 【5】 ,任务三 多线程设计,子任务1 线程体的构造 知识导读 class minthread extends Thread 【1】 public void run() 【4】 while(true) System.out.println(“Run():”+Thread.currentThread().getname(); ,任务三 多线程设计,子任务1 线程体的构造 知识导读 程序运行结果显示:main():main Run():Thread-1 Run():Thread-1 两个Syste

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

当前位置:首页 > 高等教育 > 大学课件

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