1 / 22

北京航空航天大学出版社

北京航空航天大学出版社. Java 程序设计. 主讲教师:孙修东 联系方式: sunxdj@shafc.edu.cn. 目 录. 任务一 搭建环境(构建 Java 集成开发环境). 任务二 Java 欢迎你(开发简单 Java 应用程序. 任务三 小试牛刀(学习Java语言基础). 任务四 挑战选择(使用分支控制流程). 任务五 游戏人生(使用循环控制流程). 任务六 回归自然(创建、使用类和对象). 任务七 3G时代的消息传递 ( 定义和使用类方法 ). 任务八 保护你的隐私(封装的使用).

alaura
Download Presentation

北京航空航天大学出版社

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 北京航空航天大学出版社 Java程序设计 主讲教师:孙修东 联系方式:sunxdj@shafc.edu.cn

  2. 目 录 • 任务一 搭建环境(构建Java集成开发环境) • 任务二 Java欢迎你(开发简单Java应用程序 • 任务三 小试牛刀(学习Java语言基础) • 任务四 挑战选择(使用分支控制流程) • 任务五 游戏人生(使用循环控制流程) • 任务六 回归自然(创建、使用类和对象) • 任务七 3G时代的消息传递(定义和使用类方法) • 任务八 保护你的隐私(封装的使用) • 任务九 子承父业(继承和多态的使用) • 任务十 上帝万能之手(接口的使用) 2/22

  3. 目 录 • 任务十一 用数组存储信息(使用数组) • 任务十二 使用字符串进行交流(使用字符串) • 任务十三 防患于未然(捕获并处理异常) • 任务十四 主动出击(抛出异常) • 任务十五 认识Java Applet(Applet入门) • 任务十六 丰富多彩的Applet(在Applet中播放声音和显示图像) • 任务十七 进入Windows世界(设计图形用户界面) • 任务十八 布局规划(使用布局管理器) • 任务十九 事件委托处理(如何处理事件) • 任务二十 选择之道(使用选择控件和选择事件) 3/22

  4. 目 录 • 任务二十一 简明清晰的菜单(使用菜单和其他常用事件) • 任务二十二 访问数据(使用JDBC连接数据库) • 任务二十三 访问数据升级(数据库编程) • 任务二十四 文件管理(目录与文件管理) • 任务二十五 顺序进出之道(文件的顺序访问) • 任务二十六 随机进出之道(文件的随机访问) • 任务二十七 JAVA的分身术(创建和启动线程) • 任务二十八 线程的生命周期与优先级(线程的状态与调度) • 任务二十九 基于连接的通信(Java中的套接字Socket) • 任务三十 基于无连接的通信(Java中的数据报编程) 4/22

  5. 任务十四 主动出击(抛出异常) 1 知识目标 抛出异常;声明异常;自定义异常。 2 能力目标 运用throw抛出异常;运用throws声明异常;能够自定义异常。 5/22

  6. 内容提要 1 跟我做:抛出异常 2 实现方案 3 代码分析 4 必备知识 5 动手做一做 6/22

  7. 14.1 跟我做:抛出异常 • 任务情景 • 在系统中,输入身份证号码。当身份证号码位数不等于18位时,产生异常。当身份证号码中输入非数字时,也产生异常。请编写程序实现此功能。 • 运行结果 第1章目录 7/22

  8. 14.2 实现方案 • 问题分析 • 输入一个字符串可以用java.util.Scanner的nextLine()方法。但在程序运行时,会产生很多意想不到的输入问题,如输入的身份证号码位数不正确,身份证号码中出现了字母、特殊符号等,程序的运行就不正确了,严重时程序发生中断,无法正确运行下去。要保证程序的健壮性,可以采用异常捕获和处理技术。 第1章目录 8/22

  9. 14.2 实现方案 • 解决步骤 • 1.打开Eclipse,在study项目中创建包com.task14,再确定类名IdException,得到类的框架。 • package com. task14; • public class IdException{ • /** • * @param args • */ • public static void main(String[] args) { • // TODO Auto-generated method stub • } • } 第1章目录 9/22

  10. 14.2 实现方案 • 2.然后,输入public static boolean isId(String id) throws Exception方法,方法体关键代码如下: • throw new Exception("异常:身份证号码位数不正确"); //抛出异常 • try{ • …… //可能产生异常的代码,参见14.3 • }catch(NumberFormatException ne){ • throw new Exception("异常:身份证号码不全为数字"); //抛出异常 • } • 3.最后,将// TODO Auto-generated method stub替换成: • Scanner in=new Scanner(System.in); • try{ • …… //可能产生异常的详细实现代码参见14.3 • }catch(Exception nie){ //捕获异常 • System.out.println(nie.getMessage()); • } • 4.导入java.util.Scanner后,运行程序。 第1章目录 10/22

  11. 14.3 代码分析 • 程序代码 • package com.task14; • import java.util.Scanner; • /** • * IdException.java • * 实现try/catch,身份证id • */ • public class IdException { • static String id; • /** • * @param args • */ • public static void main(String[] args) { • Scanner in=new Scanner(System.in); • try{ System.out.println("输入身份证号码:"); • id=in.nextLine(); • if (isId(id)) { //可能产生异常的代码 • System.out.println("身份证号码正确!"); • } • }catch(Exception nie){ //捕获异常 第1章目录 11/22

  12. 14.3 代码分析 • System.out.println(nie.getMessage()); • } • } • public static boolean isId(String id) throws Exception{//判断id是否正确 • boolean isid=true; • if (id.length()!=18){ • throw new Exception("异常:身份证号码位数不正确"); //抛出异常 • } • try{ Long.parseLong(id); //可能产生异常的代码 • }catch(NumberFormatException ne){ • throw new Exception("异常:身份证号码不全为数字"); //抛出异常 • } • return isid; • } • } 第1章目录 12/22

  13. 14.3 代码分析 • 应用扩展 • 上面抛出的异常是Exception标准类及子类对象,在实际项目中往往有自己的需要,定义异常类,实现特殊的功能。如,下面自定义NotIdException异常类,实现自己的功能,改写代码。参见14.4.3。 • package com.task13; • import java.util.Scanner; • /** • * IdException.java • * 实现try/catch,身份证id • */ • public class IdException { • static String id; • /** • * @param args • */ • public static void main(String[] args) { • Scanner in=new Scanner(System.in); 13/22

  14. 14.3 代码分析 • try{ System.out.println("输入身份证号码:"); • id=in.nextLine(); • if (isId(id)) { • System.out.println("身份证号码正确!"); • } • }catch(NotIdException nie){ //捕获自定义NotIdException异常 • System.out.println(nie.getMessage()); • } • } • public static boolean isId(String id) throwsNotIdException{ // 声明自定义NotIdException异常 • boolean isid=true; • if (id.length()!=18){ • throw new NotIdException("异常:身份证号码位数不正确");//抛出NotIdException异常 • } • try{ • Long.parseLong(id); • }catch(NumberFormatException ne){ 14/22

  15. 14.3 代码分析 • throw new NotIdException("异常:身份证号码不全为数字");//抛出NotIdException异常 • } • return isid; • } • } • /** • * NotIdException • *自定义异常类:非法ID异常类NotIdException • */ • class NotIdException extends Exception{ //自定义异常类NotIdException • NotIdException(){ //增加自己的功能 • super(); • } • NotIdException(String message){ • super(message); • } • } 15/22

  16. 14.4 必备知识 • 14.4.1 声明异常 • 上一个任务中,学习了用try/catch/finally结构捕获、处理异常,但是,在有些情况下,在方法的内部,方法本身不需要处理它产生的异常,而是向上传递,由调用它的方法来处理这些异常。 • 这就要用到声明异常。声明异常的格式如下: • [修饰符]<返回类型> 方法名([参数列表]) throws异常列表 • throws是关键字。 • 例如,在throwsMethod ()方法的定义中,声明异常可以按如下写代码: • static void throwsMethod () throws ArithmeticException,IndexOutOfBoundsException{ • //方法体 • } • 在方法体中,存放可能产生ArithmeticException和IndexOutOfBoundsException异常的代码,但是,方法体中的代码对异常不做任何捕获和处理。当方法中产生异常时,由调用throwsMethod ()的方法来处理。 • 声明异常后,怎么捕获和处理异常?举例如下: 第1章目录 16/22

  17. 14.4 必备知识 • package com.task14; • /** • * ThrowsException.java • * 声明异常 • */ • public class ThrowsException { • //在方法定义中声明可能产生的异常 • static int throwsMethod(int a,int b) throwsArithmeticException,IndexOutOfBoundsException{ • int c[]={0,1}; • c[0]=a; • c[1]=b; • //c[3]=b; //产生IndexOutOfBoundsException异常 • return c[1]/c[0]; //产生ArithmeticException异常 • } • /** • * @param args • */ • public static void main(String[] args) { • try{ • throwsMethod(0,3); //调用throwsMethod()方法 • }catch(ArithmeticException ae){ //捕获和处理方法上传的异常 • System.out.println("异常1:"); • ae.printStackTrace(); • }catch(IndexOutOfBoundsException ie){ //捕获和处理方法上传的异常 • System.out.println("异常2:"); • ie.printStackTrace(); • }finally{ • System.out.println("捕获和处理异常结束"); • } • } • } • 这是一个完整的声明异常,然后捕获和处理异常的例子,请领会声明异常和捕获处理异常两者之间的异常类关系。 第1章目录 17/22

  18. 14.4 必备知识 • 14.4.2 主动抛出异常 • 在捕获异常前,必须有代码产生异常对象,并把它抛出。抛出异常的代码一般是Java运行时系统自动完成的,但是,如果程序员需要主动抛出异常,也可以在自己的代码中完成这样的效果。这是通过throw语句实现的。 • throw语句格式: • throw 异常对象; • 例如,当程序员需要在程序中主动抛出空指针异常,代码如下: • throw new NullPointerException(); • 下面是一个主动抛出异常,然后捕获和处理异常的例子。代码如下: 18/22

  19. 14.4 必备知识 • package com.task14; • /** • * ThrowException.java • * 主动抛出异常 • */ • public class ThrowException { • /** • * @param args • */ • public static void main(String[] args) { • try{ • throw new NullPointerException(); //主动抛出空指针异常 • }catch(NullPointerException ne){ //捕获和处理异常 • System.out.println("异常:"); • ne.printStackTrace(); • }finally{ • System.out.println("捕获和处理异常结束"); • } • } • } 19/22

  20. 14.4 必备知识 • 14.4.3 自定义异常 • 以上所涉及的异常类都是Java提供的。开发系统时,程序员往往有特别的需求,需要定义自己的异常类。自定义异常必须继承Exception类或其子类。例如,先定义SelfDefineException自定义异常类,然后在Cal类中定义了方法sqrt(),该方法中声明了自定义异常,并在一定条件下抛出了异常。在测试类SelfExceptionTest中,捕获和处理自定义异常。 • package com.task14; • /** • * SelfException.java • * 自定义异常 • */ • class SelfDefineExceptionextendsException{ //自定义异常类 • public SelfDefineException(){ • super(); • } • public SelfDefineException(String str){ • super(str); • } • } 20/22

  21. 14.4 必备知识 • class Cal{ • static void sqrt(double d) throwsSelfDefineException{ //声明自定义异常 • if (d<0){ • throw new SelfDefineException("负数不好求平方根,请仔细检查!");//抛出自定义异常 • }else{ • System.out.println(d+"的平方根为:"+Math.sqrt(d)); //正常执行方法的功能 • } • } • } • public class SelfExceptionTest { • public static void main(String[] args) { • try{ • Cal.sqrt(4); • Cal.sqrt(-4); //抛出自定义异常 • }catch(SelfDefineException se){//捕获和处理自定义异常 • System.out.println("异常:"); • se.printStackTrace(); • }finally{ • System.out.println("捕获和处理异常结束"); • } } } 21/22

  22. 14.5 动手做一做 • 一、实训目的 • 掌握throw抛出异常; 掌握throws声明异常; 掌握自定义异常。 • 二、实训内容 • 给类的属性身份证号码id设置值,当给定的值长度为18时,赋值给id,当值长度不为18时,抛出IllegalArgumentException异常,然后捕获和处理异常。请编写程序。 • 三、简要提示 • 给身份证号码id赋值,定义setId()方法。在方法中抛出异常需要使用throw关键字。在捕获和处理异常时,使用try/catch/finally结构,异常类为IllegalArgumentException。 • 四、程序代码 • 参见本教材教学资源。 • 五、实训思考 • 1.如何抛出异常? • 2.声明异常后,如何捕获和处理异常。 22/22

More Related