使用异常处理程序错误和logj记录错误.ppt

上传人:sccc 文档编号:5373296 上传时间:2023-06-30 格式:PPT 页数:34 大小:3.07MB
返回 下载 相关 举报
使用异常处理程序错误和logj记录错误.ppt_第1页
第1页 / 共34页
使用异常处理程序错误和logj记录错误.ppt_第2页
第2页 / 共34页
使用异常处理程序错误和logj记录错误.ppt_第3页
第3页 / 共34页
使用异常处理程序错误和logj记录错误.ppt_第4页
第4页 / 共34页
使用异常处理程序错误和logj记录错误.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《使用异常处理程序错误和logj记录错误.ppt》由会员分享,可在线阅读,更多相关《使用异常处理程序错误和logj记录错误.ppt(34页珍藏版)》请在三一办公上搜索。

1、使用异常处理程序错误,第四章,回顾,什么是常量?Java中,常量的定义规则有哪些?什么是面向接口编程,它的好处是什么?,预习检查,什么是异常?Java中,如何进行异常处理?请说明throw 与 throws的区别与联系?,本章任务,升级HelloACCP,完成如下功能:根据课程代码输出课程名称输出各学期平均课时等信息使用log4j记录异常日志,掌握Java的异常处理机制运用 try、catch、finally 处理异常运用 throw 抛出异常运用 throws 声明异常掌握log4j的用法,能够记录异常日志,本章目标,生活中的异常,正常情况下,小王每日开车去上班,耗时大约30分钟,但是,异常

2、情况迟早要发生!,一路畅通,堵车!,撞车!,程序中的异常,public class HelloAccp public static void main(String args)System.out.print(请输入课程代号(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:Sy

3、stem.out.println(SQL基础);,输入:2输出:Java编程,输入:B程序中断运行!,正常情况:,异常情况:,什么是异常,异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,绕行或者等待,请求交警解决,异常!,面对异常该怎么办呢?通常情况下,我们会这样处理:,程序运行,程序中断运行,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,什么是异常处理,Java编程语言使用异常处理机制为程序提供了错误处理的能力,程序中预先想好了 对付异常的处理办法,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,Java中如何进行异常

4、处理,Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws,捕获异常,catch,try,finally,执行可能产生 异常的代码,捕获异常,无论是否发生异常,代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要抛出的各种异常,throws,try/catch块7-1,try,catch,try/catch 块后的代码段,public void method()try/代码段(此处不会产生异常)catch(异常类型 ex)/对异常进行处理的代码段/代码段,使用try/catch块捕获异常,分为三种情况:,第一种情况,tr

5、y/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;case 2:System.out.println(Java编程);break;case 3:System

6、.out.println(SQL基础);catch(Exception ex)System.out.println(输入不为数字!);System.out.println(欢迎提出建议!);,输入:2,Java编程欢迎提出建议!,控制台输出,try/catch块7-3,try,catch,异常类型匹配,try/catch 块后的代码段,进入catch块,public void method()try/代码段 1/产生异常的代码段 2/代码段 3 catch(异常类型 ex)/对异常进行处理的代码段4/代码段5,使用try/catch块捕获异常,分为三种情况:,第二种情况,产生异常对象,程序继续

7、执行,异常是一种特殊的对象,类型为java.lang.Exception或其子类,发生异常,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 courseCode=in.nextInt();switch(courseCode)case 1:System.out.println(C#编程);break;case

8、2:System.out.println(Java编程);break;case 3:System.out.println(SQL基础);catch(Exception ex)System.out.println(输入不为数字!);ex.printStackTrace();System.out.println(欢迎提出建议!);,输入:B,输入不为数字!异常堆栈信息欢迎提出建议!,控制台输出,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,public class AccpException public static void main(String args)S

9、ystem.out.print(请输入课程代号(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块7-5,try/catch块7-6,try,catch,异常类型不匹配,try/catch 块后的代码段,程序中断运行,发生异常,public void method

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

11、(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/finally 2-1,在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行,tr

12、y 块,finally 块,catch 块,无异常,有异常,try/catch/finally 2-2,public class AccpException3 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

13、(Java编程);break;case 3:System.out.println(SQL基础);catch(Exception ex)System.out.println(输入不为数字!);finally System.out.println(欢迎提出建议!);,输入:2,Java编程欢迎提出建议!,控制台输出,输入:B,输入不为数字!欢迎提出建议!,第一种情况:无异常,第二种情况:有异常,小结 1,编写一个类ExceptionTest1,在main方法中使用try、catch、finally:在try块中,编写被0除的代码在catch块中,捕获被0除所产生的异常,并且打印异常信息在final

14、ly块中,打印一条语句,完整代码实现,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 块后的代码段,发生异常,产生异常对象

15、,catch,与异常类型2匹配,catch,catch,程序继续执行,进入catch块,多重catch块 2-2,public class AccpException4 public static void main(String args)Scanner in=new Scanner(System.in);trySystem.out.print(“请输入S1的总学时:);int totalTime=in.nextInt();/总学时System.out.print(“请输入S1的课程数目:);int totalCourse=in.nextInt();/课程数目System.out.print

16、ln(“S1各课程的平均学时为:+totalTime/totalCourse);catch(InputMismatchException e1)System.out.println(输入不为数字!);catch(ArithmeticException e2)System.out.println(课程数目不能为零!);catch(Exception e)System.out.println(发生错误:+e.getMessage();,输入:270 H,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化,即先子类后父类,输出:输入不为数字!,进入第一个catch块,输入:27

17、0 0,输出:课程数目不能为零!,进入第二个catch块,抛出异常,如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理,public class AccpTeacher private String id;/教员编号,长度应为7 public void setId(String pId)/判断教员编号的长度是否为7 if(pId.length()=7)id=pId;else throw new IllegalArgumentException(参数长度应为7!);,public class AccpTeacherTest public static void main(Stri

18、ng args)AccpTeacher teacher=new AccpTeacher();try teacher.setId(088);catch(IllegalArgumentException ex)System.out.println(ex.getMessage();,抛出异常,捕获异常,参数长度应为7!,控制台输出,声明异常,public class AccpTeacher private String id;/教员编号,长度应为7 public void setId(String pId)throws IllegalArgumentException/判断教员编号的长度是否为7 i

19、f(pId.length()=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();,由调用者捕获异常,声明该方法可能会产生异常,小结 2,编写

20、类ExceptionTest2:定义两个方法:go()和main()在go方法中声明要抛出异常,在该方法体内,抛出一个Exception对象在main()方法中,调用go方法,使用try/catch捕获go方法中抛出的异常,完整代码实现,使用log4j记录日志信息,public class AccpTeacherTest public static void main(String args)AccpTeacher teacher=new AccpTeacher();try teacher.setId(088);catch(IllegalArgumentException ex)System.

21、out.println(ex.getMessage();,控制台输出,参数长度应为7!,如果要在控制台与文件中同时输出错误信息,该如何处理?,使用log4j可以解决这个问题,log4j是一个流行的日志记录工具,这是使用log4j后,存储在文本文件中的日志信息,什么是日志,日志:用来记录一些重要的操作信息有价值的日志数据能够帮助用户提前发现和避开灾难,并且找到事件发生的原因,public class AccpTeacherTest public static void main(String args)AccpTeacher teacher=new AccpTeacher();try teach

22、er.setId(088);catch(IllegalArgumentException ex)System.out.println(ex.getMessage();,在控制台输出日志信息,提示用户出现错误的原因,如何使用log4j记录日志,项目 属性:弹出项目的属性窗口,第一步:在工程中加入log4j所使用的jar文件,Java构建路径库添加外部JAR:弹出选择JAR的窗口,通过选择JAR的窗口,找到log4j-1.2.x.jar,并确认,回到项目的属性窗口,点击确定,1,2,3,4,演示:在工程中加入log4j所使用的jar文件,如何使用log4j记录日志,第二步:创建log4j.prop

23、erties文件,选择欲使用log4j的项目右键点击src 新建其他:弹出选择向导窗口,在选择向导窗口中,选择常规 文件 下一步:弹出新建文件的窗口,在新建文件窗口中,输入文件名log4j.properties 完成:创建工作结束,1,2,3,演示:创建log4j.properties文件,如何使用log4j记录日志,第三步:使用log4j记录日志信息,import org.apache.log4j.Logger;public class AccpTeacherLog4j public static void main(String args)AccpTeacher teacher=new A

24、ccpTeacher();Logger logger=Logger.getLogger(AccpTeacherLog4j.class.getName();try logger.debug(设置教员的编号。);teacher.setId(088);catch(IllegalArgumentException ex)logger.info(ex.getMessage();,获取日志记录器,这个记录器将负责控制日志信息,使用Logger对象的debug、info方法输出日志信息,如何使用log4j记录日志,第四步:编写log4j.properties文件,配置日志信息,#把日志信息输出到控制台#lo

25、g4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.outlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss%m%n#把日志信息输出到文件:accp.log#log4j.appender.file=org.apache.log4j.FileAppenderlog4j.ap

26、pender.file.File=accp.loglog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss%l%m%n#设置优先级别、以及输出源#log4j.rootLogger=debug,stdout,file,日志信息将写到文件中,指定日志输出的文件名,指定输出格式:显示日期和log信息,设置优先级别为debug、日志被输出到多个输出源,日志信息将写到控制台,信息打印到System.out上,指定输出

27、格式:显示日期,日志发生位置和日志信息,输出源名称,优先级从高到低分别是ERROR、WARN、INFO、DEBUG 在此处,如果优先级别设为info,那么使用debug方法打印的日志信息将不被输出,如何使用log4j记录日志,运行效果展示,控制台输出效果,包含日期与日志信息,文件输出效果,包含日期、日志发生位置、与日志信息,1,2,总结,请给出下列Java代码的运行结果,public class Test public static void main(String args)new Test().test();public void test()try int arr=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);,修改log4j.properties文件,设置优先级为info,在控制台以及accp.log文件中将会输出什么内容?,控制台输出,catch 1finally,将只输出使用Logger对象的info方法输出的日志信息,Thank you,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号