8.Java异常机制.ppt_第1页
8.Java异常机制.ppt_第2页
8.Java异常机制.ppt_第3页
8.Java异常机制.ppt_第4页
8.Java异常机制.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

1、,Graphic Design Training,Java的异常处理机制,TRAINING COURSE.1,2014-06, 主讲人:唐睿,【章程目标】,掌握Java的异常处理机制 运用 try 、catch 、 finally 处理异常 运用 throw 抛出异常 运用 throws 声明异常 掌握Java调试技巧,正常情况下,小王每日开车去上班,耗时大约30分钟,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,【生活中的异常】,public class HelloProgram public static void main(String args) System.out.prin

2、t(请输入课程代号(1至3之间的数字):); Scanner in = new Scanner(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基础); ,输入:2 输出:Java编程,输入:B 程序中断运行!,正常情况:,异常情况:,【程序中的异常】,异常就是在程序的运行过

3、程中所发生的不正常的事件,它会中断正在运行的程序,绕行或者等待,请求交警解决,异常!,面对异常该怎么办呢?通常情况下,我们会这样处理:,程序运行,程序中断运行,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,【什么是异常】,Java编程语言使用异常处理机制为程序提供了可能出现的错误处理的能力,程序中预先想好了 对付异常的处理办法,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,【异常处理(生活还要继续)】,错误在编译的时候就可以发现,逻辑错误在编写代码时候就应该纠正 错误是由100%的错误机率导致。 异常是在执行过程中发生的意外,由潜在的错误机率

4、导致,【异常和错误的区别】,Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws,捕获异常,catch,try,finally,执行可能产生 异常的代码,捕获异常,无论是否发生异常, 代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要 抛出的各种异常,throws,【Java如何进行异常处理】,捕获异常的关键步骤 try 定义可能产生例外的代码段 catch (Etype e) 用于捕获一个例外 finally 用于做统一的事后处理,如释放资源 throw e; 用于抛出一个例外 throws Etype1, Ety

5、pe2 用于声明方法可能抛出的例外类型,throw / throws try-catch-finally,【异常捕获】,使用try/catch块捕获异常,分为三种情况:,try,catch,try/catch 块后的代码段,public void method() try / 代码段(此处不会产生异常) catch (异常类型 ex) / 对异常进行处理的代码段 / 代码段 ,第一种情况,【try/catch块】,使用示例模拟第一种情况:,public class ExceptionExample public static void main(String args) System.out.

6、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 (Exception ex) System.out.println(输入不为数字!); System.out.pr

7、intln(欢迎提出建议!); ,输入:2,Java编程 欢迎提出建议!,控制台输出,【try/catch块】,使用try/catch块捕获异常,分为三种情况:,try,catch,异常类型匹配,try/catch 块后的代码段,进入catch块,public void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,第二种情况,产生异常对象,程序继续执行,异常是一种特殊的对象,类型为java.lang.Exception或其子类,发生异常,【try/catch块】,使用示例模拟第

8、二种情况:,public class ExceptionExample 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; case 2: System.out.println(Java编程); break; case 3: System

9、.out.println(SQL基础); catch (Exception ex) System.out.println(输入不为数字!); ex.printStackTrace(); System.out.println(欢迎提出建议!); ,输入:B,输入不为数字! 异常堆栈信息 欢迎提出建议!,控制台输出,【try/catch块】,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,public class ExceptionExample public static void main(String args) System.out.print(请输入课程代号

10、(1至3之间的数字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此处代码省略 catch (Exception ex) System.out.println(输入不为数字!); ex.printStackTrace(); System.out.println(欢迎提出建议!); ,【try/catch块】,【try/catch块】,使用try/catch块捕获异常,分为三种情况:,try,catch,异常类型不匹配,try/catch 块后的代码段,程序中断运行,发生异常,public

11、 void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,第三种情况,产生异常对象,【try/catch块】,使用示例模拟第三种情况:,public class ExceptionExample2 public static void main(String args) System.out.print(请输入课程代号(1至3之间的数字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt

12、(); switch (courseCode) case 1: System.out.println(“C编程”); break; case 2: System.out.println(Java编程); break; case 3: System.out.println(SQL基础); catch (NullPointerException ex) System.out.println(输入不为数字!); System.out.println(欢迎提出建议!); ,输入:B,程序中断运行,【try/catch块】,在try/catch块中,可以确保无论是否发生异常,finally块中的代码总能

13、被执行(就算有return和break也会执行),try 块,finally 块,catch 块,无异常,有异常,【try/catch/finally 】,public class ExceptionExample3 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.print

14、ln(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(欢迎提出建议!); ,输入:2,Java编程 欢迎提出建议!,控制台输出,输入:B,输入不为数字! 欢迎提出建议!,第一种情况: 无异常,第二种情况: 有异常,【try/catch/finally 】,编写一个类ExceptionTest1,在main方法中

15、使用try、catch、finally: 在try块中,编写被0除的代码 在catch块中,捕获被0除所产生的异常,并且在finally块中,打印一条语句,【小结】,public void method() try / 代码段 / 产生异常(异常类型2) catch (异常类型1 ex) / 对异常进行处理的代码段 catch (异常类型2 ex) / 对异常进行处理的代码段 catch (异常类型3 ex) / 对异常进行处理的代码段 / 代码段 ,一段代码可能会引发多种类型的异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句 执行其中的一条

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

17、 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.println(发生错误

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

19、 id = pId; else throw new IllegalArgumentException(参数长度应为7!); ,抛出异常,【抛出异常】,如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理,public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage();

20、,捕获异常,参数长度应为7!,控制台输出,【抛出异常】,public class Teacher 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 TeacherTest public static void main(String ar

21、gs) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); ,由调用者捕获异常,声明该方法可能会产生异常,com.great.exception.chp1.ThrowsDemo1,【声明异常】,声明例外的方法 声明例外的方法是在产生异常的方法名后面加上要抛出(throws)的例外的列表: retType methodName(paramlist) throws exceptionList 如

22、类FileInputStream中的read()方法是这样定义的: public int read() throws IOException throws子句中可以同时指明多个例外,说明该方法将不对这些例外进行处理,而是声明抛弃它们。 需要强调的是:对于非运行时例外,程序中必须要作处理,或者捕获,或者声明抛弃;而对于运行时例外,程序中则可不处理。,【声明例外(throws语句)】,public method1() int x; try x = System.in.read(); compute(x); catch(IOException ioe) System.out.println(“read error”); catch(ArithmeticException e) System.out.println(“devided by 0”); ,public int compute(int x) throws ArithmeticException int z = 100/x; return z; ,调用,编写类ExceptionTest2: 定义两个方法:go()和main() 在go方法中声明要抛出异常,在该方法体内

温馨提示

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

评论

0/150

提交评论