资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,使用异常处理程序错误,第四章,1,回顾,什么是常量?,Java,中,常量的定义规则有哪些?,什么是面向接口编程,它的好处是什么?,2,预习检查,什么是异常?,Java,中,如何进行异常处理?,请说明,throw,与,throws,的区别与联系?,3,本章任务,升级HelloACCP,完成如下功能:,根据课程代码输出课程名称,输出各学期平均课时等信息,使用log4j记录异常日志,4,掌握Java的异常处理机制,运用 try、catch、finally 处理异常,运用 throw 抛出异常,运用 throws 声明异常,掌握log4j的用法,能够记录异常日志,本章目标,5,生活中的异常,正常情况下,小王每日开车去上班,耗时大约30分钟,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,6,程序中的异常,public class HelloAccp,public static void main(String args),(,请输入课程代号(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,程序中断运行!,正常情况:,异常情况:,7,什么是异常,异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,绕行或者等待,请求交警解决,异常!,面对异常该怎么办呢?通常情况下,我们会这样处理:,程序运行,程序中断运行,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,8,什么是异常处理,Java编程语言使用异常处理机制为程序提供了错误处理的能力,程序中预先想好了,对付异常的处理办法,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,9,Java中如何进行异常处理,Java的异常处理是通过5个关键字来实现的:,try,、,catch,、,finally,、,throw,、,throws,捕获异常,c,atch,try,finally,执行可能产生,异常的代码,捕获异常,无论是否发生异常,,代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要,抛出的各种异常,throws,10,try/catch块7-1,try,c,atch,try/catch,块后的代码段,public void method(),try,/代码段(此处不会产生异常),catch,(异常类型 ex),/对异常进行处理的代码段,/代码段,使用try/catch块捕获异常,分为三种情况:,第一种情况,11,try/catch块7-2,使用示例模拟第一种情况:,public class AccpException,public static void main(String args),(请输入课程代号(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),(输入不为数字!);,(欢迎提出建议!);,输入:2,Java编程,欢迎提出建议!,控制台输出,12,try/catch块7-3,try,c,atch,异常类型匹配,try/,catch 块后的代码段,进入catch块,public void method(),try,/代码段 1,/产生异常的代码段 2,/代码段 3,catch,(异常类型 ex),/对异常进行处理的代码段4,/代码段5,使用try/catch块捕获异常,分为三种情况:,第二种情况,产生异常对象,程序继续执行,异常是一种特殊的对象,,类型为java.lang.Exception或其子类,发生异常,13,try/catch块7-4,使用示例模拟第二种情况:,public class AccpException,public static void main(String args),(请输入课程代号(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),(输入不为数字!);,ex.printStackTrace();,(欢迎提出建议!);,输入:B,输入不为数字!,异常堆栈信息,欢迎提出建议!,控制台输出,14,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,public class AccpException,public static void main(String args),(,请输入课程代号(1至3之间的数字):);,Scanner in=new Scanner(System.in);,try,int courseCode=in.nextInt();,/此处代码省略,catch,(Exception ex),(,输入不为数字!);,ex.printStackTrace();,(欢迎提出建议!);,try/catch块7-5,java.util.InputMismatchException,at java.util.Scanner.throwFor(,Scanner.java:840,),at java.util.Scanner.next(,Scanner.java:1461,),at java.util.Scanner.nextInt(,Scanner.java:2091,),at java.util.Scanner.nextInt(,Scanner.java:2050,),at s2jsp.sg.ch05.AccpException.main(,AccpException.java:23,),异常类型,异常堆栈信息,在此方法中抛出了异常,15,try/catch块7-6,try,c,atch,异常类型不匹配,try/,catch 块后的代码段,程序中断运行,发生异常,public void method(),try,/代码段 1,/产生异常的代码段 2,/代码段 3,catch,(异常类型 ex),/对异常进行处理的代码段4,/代码段5,使用try/catch块捕获异常,分为三种情况:,第三种情况,产生异常对象,16,try/catch块7-7,使用示例模拟第三种情况:,public class AccpException2,public static void main(String args),(,请输入课程代号(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 ex),(,输入不为数字!);,(,欢迎提出建议!);,输入:B,程序中断运行,17,try/catch/finally 2-1,在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行,try 块,finally 块,catch 块,无异常,有异常,18,try/catch/finally 2-2,public class AccpException3,public static void main(String args),(,请输入课程代号(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),(,输入不为数字!);,finally,(,欢迎提出建议!);,输入:2,Java编程,欢迎提出建议!,控制台输出,输入:B,输入不为数字!,欢迎提出建议!,第一种情况:,无异常,第二种情况:,有异常,19,小结 1,编写一个类ExceptionTest1,在main方法中使用try、catch、finally:,在try块中,编写被0除的代码,在catch块中,捕获被0除所产生的异常,并且打印异常信息,在finally块中,打印一条语句,完整代码实现,20,public void method(),try,/代码段,/产生异常(异常类型2),catch,(异常类型1 ex),/对异常进行处理的代码段,catch,(异常类型2 ex),/对异常进行处理的代码段,catch,(异常类型3 ex),/对异常进行处理的代码段,/代码段,多重catch块 2-1,一段代码可能会引发多种类型的异常,当引发异常时,会按顺序来查看每个,catch 语句,并执行第一个与异常类型匹配的catch语句,执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略,try,与异常类型1不匹配,try/,catch 块后的代码段,发生异常,产生异常对象,c,atch,与异常类型2匹配,c,atch,c,atch,程序继续执行,进入catch块,21,多重catch块 2-2,public class AccpException4,public static void main(String args),Scanner in=new Scanner(System.in);,try,(“请输入S1的总学时:);,int totalTime=,in.nextInt(),;/总学时,(“请输入S1的课程数目:);,int totalCourse=,in.nextInt(),;/课程数目,System.out.println(“S1各课程的平均学时为:,+,totalTime/totalCourse,);,catch,(,InputMismatchException,e1),(输入不为数字!);,catch,(,ArithmeticException,e2),(课程数目不能为零!);,catch,(,Exception,e),(发生错误:+e.getMessage();,
展开阅读全文