java异常管理组织课程软件.ppt

上传人:小** 文档编号:3696136 上传时间:2020-10-16 格式:PPT 页数:28 大小:1,023.02KB
返回 下载 相关 举报
java异常管理组织课程软件.ppt_第1页
第1页 / 共28页
java异常管理组织课程软件.ppt_第2页
第2页 / 共28页
点击查看更多>>
资源描述

《java异常管理组织课程软件.ppt》由会员分享,可在线阅读,更多相关《java异常管理组织课程软件.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1,异常处理,2,目标,理解异常的概念 运用 try 块、catch 块和 finally 块处理异常 运用多重 catch 块处理异常 运用嵌套 try/catch 块处理异常 运用关键字 throw 和 throws 处理异常 运用JAVA编写和使用自定义异常,3,生活中的异常,正常情况下,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,4,程序中的异常,public class HelloAccp public static void main(String args) System.out.print(请输入1至3之间的数字:); Scanner in = new Scanner

2、(System.in); int courseCode = in.nextInt(); / 从键盘输入整数 switch (courseCode) case 1: System.out.println(C#编程); break; case 2: System.out.println(Java编程); break; case 3: System.out.println(SQL基础); ,输入:1 输出: C#编程,输入:abc 程序中断运行!,正常情况:,异常情况:,5,什么是异常,异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,绕行或者等待,请求交警解决,异常!,面对异

3、常该怎么办呢?通常情况下,我们会这样处理:,程序运行,程序中断运行,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,6,Exception,ArithmeticException,NullPointerException,Object,Throwable,Error,ThreadDeath,SQLException,RuntimeException,NumberFormatException,异常类的层次结构,Throwable 具有两个子类,它们是 Exception:处理用户程序应当捕获的异常情况 Error:Error 类的异常为内部错误,因此在正常

4、情况下不期望用户的程序捕获它们,AWTError,7,Java异常类,文件结束,EOFException,找不到文件,FileNotFoundException,I/O 异常的根类,IOException,数字转化格式异常,比如字符串到 float 型数字的转换无效,NumberFormatException,不能加载所需的类,ClassNotFoundException,方法接收到非法参数,IllegalArgumentException,数组大小小于或大于实际的数组大小,ArrayIndexOutOfBoundException,尝试访问 null 对象成员,NullPointerExce

5、ption,许多 java.lang 异常的基类,RuntimeException,异常层次结构的根类,Exception,算术错误情形,如以零作除数,ArithmeticException,线程中断,InterruptedException,说 明,异 常,8,什么是异常处理,Java编程语言使用异常处理机制为程序提供了错误处理的能力,程序中预先想好了 对付异常的处理办法,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,9,Java中如何进行异常处理,Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws,捕获异常,catch,t

6、ry,finally,执行可能产生 异常的代码,捕获异常,无论是否发生异常, 代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要 抛出的各种异常,throws,10,异常处理块的一般形式,try / 要监控错误的代码块 catch (Exception e) / Exception e 的异常处理程序 finally / 在 try 结束前要执行的代码块 ,11,try/catch块,try,catch,try/catch 块后的代码段,public void method() try / 代码段(此处不会产生异常) catch (异常类型 ex) / 对异常进行处理的

7、代码段 / 代码段 ,使用try/catch块捕获异常,分为三种情况:,第一种情况,12,try/catch块7-2,使用示例模拟第一种情况:,public class AccpException public static void main(String args) System.out.print(请输入1至3之间的数字:); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); switch (courseCode) case 1: System.out.println(C#编程); break;

8、 case 2: System.out.println(Java编程); break; case 3: System.out.println(SQL基础); catch (Exception ex) System.out.println(输入不为数字!); System.out.println(欢迎提出建议!); ,输入:2,Java编程 欢迎提出建议!,控制台输出,13,try/catch块,try,catch,异常类型匹配,try/catch 块后的代码段,进入catch块,public void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catc

9、h (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,使用try/catch块捕获异常,分为三种情况:,第二种情况,产生异常对象,程序继续执行,异常是一种特殊的对象,类型为java.lang.Exception或其子类,发生异常,14,try/catch块7-4,使用示例模拟第二种情况:,public class AccpException public static void main(String args) System.out.print(请输入1至3之间的数字:); Scanner in = new Scanner(System.in); try int course

10、Code = in.nextInt(); switch (courseCode) case 1: System.out.println(C#编程); break; case 2: System.out.println(Java编程); break; case 3: System.out.println(SQL基础); catch (Exception ex) System.out.println(输入不为数字!); ex.printStackTrace(); System.out.println(欢迎提出建议!); ,输入:abc,输入不为数字! 异常堆栈信息 欢迎提出建议!,控制台输出,15

11、,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,public class AccpException public static void main(String args) System.out.print(请输入课程代号(1至3之间的数字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此处代码省略 catch (Exception ex) System.out.println(输入不为数字!); ex.printStackTrace(); System

12、.out.println(欢迎提出建议!); ,try/catch块,16,try/catch块,try,catch,异常类型不匹配,try/catch 块后的代码段,程序中断运行,发生异常,public void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,使用try/catch块捕获异常,分为三种情况:,第三种情况,产生异常对象,17,try/catch块7-7,使用示例模拟第三种情况:,public class AccpException2 public static v

13、oid main(String args) System.out.print(请输入课程代号(1至3之间的数字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); switch (courseCode) case 1: System.out.println(C#编程); break; case 2: System.out.println(Java编程); break; case 3: System.out.println(SQL基础); catch (NullPointerException e

14、x) System.out.println(输入不为数字!); System.out.println(欢迎提出建议!); ,输入:abc,程序中断运行,18,try/catch/finally,在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行,try 块,finally 块,catch 块,无异常,有异常,19,try/catch/finally 2-2,public class AccpException3 public static void main(String args) System.out.print(请输入1至3之间的数

15、字:); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); switch (courseCode) case 1: System.out.println(C#编程); break; case 2: System.out.println(Java编程); break; case 3: System.out.println(SQL基础); catch (Exception ex) System.out.println(输入不为数字!); finally System.out.println(欢迎提出建议!

16、); ,输入:2,Java编程 欢迎提出建议!,控制台输出,输入:abc,输入不为数字! 欢迎提出建议!,第一种情况: 无异常,第二种情况: 有异常,20,public void method() try / 代码段 / 产生异常(异常类型2) catch (异常类型1 ex) / 对异常进行处理的代码段 catch (异常类型2 ex) / 对异常进行处理的代码段 catch (异常类型3 ex) / 对异常进行处理的代码段 / 代码段 ,多重catch块 2-1,一段代码可能会引发多种类型的异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句

17、 执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略,try,与异常类型1不匹配,try/catch 块后的代码段,发生异常,产生异常对象,catch,与异常类型2匹配,catch,catch,程序继续执行,进入catch块,21,多重catch块 2-2,public class AccpException4 public static void main(String args) Scanner in = new Scanner(System.in); try System.out.print(“请输入S1的总学时:); int totalTime = in.nextI

18、nt(); /总学时 System.out.print(“请输入S1的课程数目:); int totalCourse = in.nextInt(); /课程数目 System.out.println(“S1各课程的平均学时为: + totalTime / totalCourse); catch (InputMismatchException e1) System.out.println(输入不为数字!); catch (ArithmeticException e2) System.out.println(课程数目不能为零!); catch (Exception e) System.out.pr

19、intln(发生错误:+e.getMessage(); ,输入:270 H,在安排catch语句的顺序时,首先应该捕获最特殊的异常, 然后再逐渐一般化,即先子类后父类,输出: 输入不为数字!,进入第一个 catch块,输入:270 0,输出: 课程数目不能为零!,进入第二个 catch块,22,抛出异常,如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理,public class AccpTeacher private String id; / 教员编号,长度应为7 public void setId(String pId) / 判断教员编号的长度是否为7 if (pId.le

20、ngth() = 7) id = pId; else throw new IllegalArgumentException(参数长度应为7!); ,public class AccpTeacherTest public static void main(String args) AccpTeacher teacher = new AccpTeacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); ,抛出异常,捕获异常,参数长度应为7!,控制台

21、输出,23,声明异常,public class AccpTeacher private String id;/ 教员编号,长度应为7 public void setId(String pId) throws IllegalArgumentException / 判断教员编号的长度是否为7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(参数长度应为7!); ,public class AccpTeacherTest public static void main(String args) AccpT

22、eacher teacher = new AccpTeacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); ,由调用者捕获异常,声明该方法可能会产生异常,24,用户自定义异常,自定义异常概念 使用自定义异常的时候 JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常 自定义异常需要继承Exception 及其子类,25,用户自定义异常,创建一个类继承 Exception 或其子类 为该异常类添加构造方

23、法 在一个方法中使用throw抛出异常 在另一个方法中捕获并处理异常,class MyException extends Exception private int i; MyException(int a) i = a; public String toString() return i + 大于10啦; ,26,用户自定义异常 2-3,public class ExceptionDemo static void go(int a) throws MyException System.out.println(a=+a); if (a 10) throw new MyException(a);

24、 System.out.println(正常结束); public static void main(String args) try go(1); go(20); catch (MyException e) System.out.println(捕获异常: + e); ,控制台输出,a=1 正常结束 a=20 捕获异常:20大于10啦,27,总结,请给出下列Java代码的运行结果,public class Test public static void main(String args) new Test().test(); public void test() try int arr =

25、new int3; arr3 = 2; System.out.println(try); catch (ArrayIndexOutOfBoundsException e) System.out.println(catch 1); catch (Exception e) System.out.println(catch 2); finally System.out.println(finally); ,控制台输出,catch 1 finally,28,总结,请给出下列Java代码的运行结果,public class TestE public static void main(String args) try test(); catch (Exception e) System.out.println(exception); System.out.println(end); public static void test() throws Exception try throw new Exception(); finally System.out.println(finally); ,控制台输出,finally exception end,

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁