《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章

上传人:E**** 文档编号:89401193 上传时间:2019-05-24 格式:PPT 页数:43 大小:793.01KB
返回 下载 相关 举报
《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章_第1页
第1页 / 共43页
《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章_第2页
第2页 / 共43页
《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章_第3页
第3页 / 共43页
《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章_第4页
第4页 / 共43页
《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章》由会员分享,可在线阅读,更多相关《《Java程序设计技能教程》-彭德林-电子教案 JAVA程序设计技能教程第7章(43页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计技能教程,主编 彭德林 李德有 中国水利水电出版社 ,第7章 异常处理和多线程,任务一 :掌握Java中对异常的处理,任务三 :实训七 异常处理与多线程编程实训,任务二 :掌握程序对多线程的处理,7.1 任务一 掌握Java中对异常的处理,7.1.1 异常类和异常处理机制 1. 异常类 Java语言采用面向对象的方法来处理异常,每个异常都是由异常类产生的对象,所有的异常类(java.lang.Exception)均继承自java.lang.Object中的java.lang.Throwable类。它提供了一些方法让我们能够了解异常产生的原因和一些相关的信息。Java中的异常类具

2、有层次组织,Throwable类是Object类的直接子类,Throwable类又有Error类(错误类)和Exception类(异常类)两个直接子类,这两个子类又有许多各自的子类,如图7-1 。,图 7-1 异常类的继承结构,2. 异常处理机制,Java语言提供的异常处理机制,由捕获异常和处理异常两部分组成。在Java程序的执行过程中,如果出现了异常事件,就会生成一个异常对象。生成的异常对象将传递给Java运行系统,这一异常的产生和提交过程称为抛出(throw)异常。当Java系统得到一个异常对象时,它将会寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,系统把当前异常对象交给这个

3、方法进行处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异的方法,则运行时系统将终止,相应的Java程序也将退出。,7.1.2 程序中异常处理方法 1. 捕获异常 在Java中用try-catch- finally结构来捕获和处理异常,其语法结构为: try 可能产生异常的程序代码块; catch()/要处理的第一种异常 处理捕获到的异常的代码块; catch()/要处理的第二种异常 处理捕获到的异常的代码块; finally /最终处理语句 无论是否抛出异常都要执行的代码;,说明: try后面的用来选定捕获异常的范围,就是我们觉得哪段语句可能会出现异常我们就把这

4、部分语句放到try后面的里,如果这一范围内的某条语句发生异常,程序就会跳出try部分,不再继续try块中剩余的语句,根据异常的类型来执行相应的catch语句块,去处理相应的异常。catch语句可以有多个,构成多重catch语句,处理不同类型的异常。如果有一个catch语句指定的异常类型与发生的异常类型相符,那么就会执行这个catch语句,其他的catch语句则会被跳过不被执行。如果没有抛出异常,那么try代码块就会结束,并且会跳过所有catch语句,从最后一个catch后面的第一个语句继续执行。因此,只有在有异常抛出时,才会执行catch语句。catch语句中定义变量的方法与在方法中定义参数相

5、同,只不过这个变量对应的是一个对象实例。不论前面catch语句执不执行finally后面中的语句都会执行。,【例7-3】加入异常处理的多异常程序 import javax.swing.JOptionPane; public class ArrayTest2 static void arraylong() int inputvalue,i; String input; int array; do input=JOptionPane.showInputDialog(“请输入数组长度:“);/ 显示输入对话框 inputvalue=Integer.parseInt(input); /将输入的数据转换

6、为整型 try array=new intinputvalue; for(i=0;i5;i+), System.out.println(“输出array“+i+“+“=“+arrayi+“ i=“+i); catch(NegativeArraySizeException e) JOptionPane.showMessageDialog(null,“数组长度不能为负数请重新输入“); /输出异常处理信息 catch(ArrayIndexOutOfBoundsException f) JOptionPane.showMessageDialog(null,“数组长度越界请重新输入“); while(

7、inputvalue5);/条件不符合时返回重新输入 JOptionPane.showMessageDialog(null,“数组长度是“+inputvalue,“数组长度是“,JOptionPane.INFORMATION_MESSAGE); public static void main(String args) Arraylong(); ,【例7-3】执行结果,2. 异常的捕获顺序 在程序中捕获的NegativeArraySizeException异常类和ArrayIndexOutOfBoundsException异常类都是Exception的子类,然而父子类之间是可以有自动类型转换运算

8、的,这就导致了异常捕获时有先后顺序,如果我们将catch(NegativeArraySizeException e)改为catch(Exception e),当产生ArrayIndexOutOfBoundsException异常时第一个catch就会先将这个异常捕获并转换为Exception,后一个catch就不起作用了,程序就会报错如图7-5。,图 7-5,需要指出的是Java系统本身给我们提供了几种显示信息的方法如: toString()方法会显示异常类的名称和产生的原因。 getLocalizedMessage()方法和getMessage()方法会显示异常发生的原因但不会显示异常的名称

9、。其中getLocalizedMessage()方法显示的信息会以该程序所在平台的语系所使用的文字为主。 printStackTrace()方法会显示产生这个异常的相关类名称以及是第几行程序代码产生的这个异常。,3. 抛出异常 (1)throws关键字的使用 在方法中声明使用throws的具体格式为: 返回类型 方法名(参数1,参数2)throws异常类型1,异常类型2 返回类型是方法的返回数据类型,参数是方法的参数,异常类型可以有多个用逗号隔开。我们可以将例7-3中在arraylong()方法中可能出现的异常抛出,由调用它的main()方法来处理。,【例7-4】声明抛出异常程序 import

10、 javax.swing.JOptionPane; public class ArrayTest3 static void arraylong()throws NegativeArraySizeException,ArrayIndexOutOf BoundsException int inputvalue,i; String input; int array; array=new int5; input=JOptionPane.showInputDialog(“请输入数组长度(必须为小于5的正整数):“); inputvalue=Integer.parseInt(input); for(i=0

11、;iinputvalue;i+) System.out.println(“输出array“+i+“+“=“+arrayi+“ i=“+i); public static void main(String args) try arraylong(); catch(NegativeArraySizeException e) JOptionPane.showMessageDialog(null,“数组长度不能为负数“); catch(ArrayIndexOutOfBoundsException f) JOptionPane.showMessageDialog(null,“数值大于5数组长度越界“);

12、 ,(2)throw关键字的使用 throw关键字主要是用在try块中,用来明确的抛出一个“异常”。throw关键字后面跟随一个从Throwable类中派生的异常对象,用来说明发出的异常类型。throw语句促使程序立即停止运行,并且执行最近能够处理指定对象的catch语句。如果异常在程序的其他地方产生,throw语句也可以放在try语句的后面。为了把异常处理控制传递给更高层的处理模块,还可以对截获的异常对象再一次实施throw操作。Throw语句的通常形式为: throw 异常类名;,【例7-5】用throw语句抛出异常程序 public class Throwtest1 static voi

13、d A() System.out.println(“方法A执行中“); public static void main(String args) try A(); throw new RuntimeException(“方法A出现异常“); catch(Exception e) System.out.println(“捕获方法A出现的异常“); finally System.out.print(“方法A结束“); ,说明: 如果抛出异常而没有找到处理这个异常的代码,或者没有再次被抛出或者catch语句中捕获异常的类型与抛出的不一致则程序会报错。 throw 与 throws的区别在于:thro

14、w是语句抛出一个异常,throws 是方法声明抛出一个异常; throw不能单独使用,throw要么和try-catch-finally语句配套使用,要么与throws配套使用,而throws可以单独使用,然后再由处理异常的方法捕获。,4. 自定义异常类实现 自定义异常类有两种方法:继承Throwable类或者Exception类。 自定义异常类之间也可以有继承关系,在定义时需要为自定义异常类设计构造方法,以方便构造自定义异常对象。由于Exception是Throwable类的子类,所以我们自定义的异常类可以获得Throwable定义的方法。我们也可以在创建的异常类中覆盖一个或多个这样的方法。

15、自定义异常类的基本形式如下所示: class 自定义异常extends 父异常类名 类体; ,【例7-6】自定义异常类程序 class ZiDing extends Exception/自定义异常类 int i; ZiDing (int a) /构造函数 i=a; public String toString()/覆盖父类方法 return i+“是非法操作数“; public class FirstException static void jiancha(int a) throws ZiDing,if(a100) throw new ZiDing(a);/抛出自定义类 System.out.println( a +“是合法操作数“); System.out.println( “程序结束“); public static void main(String args) try jiancha(50); jiancha(101); catch (ZiDing e)/捕获自定义类 System.out.println(“捕获了异常“ + e); ,7.2.1 多线程的概念 多线程是相对于单线程而言的,指的是在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。 多线程的意义在于一个应用程序的多个逻辑单元可以并发地执行。但是多现程并不意味着

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

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

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