版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用异常处理程序错误,第十五讲,2,回顾,什么是常量?Java中,常量的定义规则有哪些? 什么是面向接口编程,它的好处是什么?,3,预习检查,什么是异常?Java中,如何进行异常处理? 请说明throw 与 throws的区别与联系?,4,本章任务,升级Hello,完成如下功能: 根据课程代码输出课程名称 输出各学期平均课时等信息 使用log4j记录异常日志,5,掌握Java的异常处理机制 运用 try 、catch 、 finally 处理异常 运用 throw 抛出异常 运用 throws 声明异常 掌握log4j的用法,能够记录异常日志,本章目标,6,生活中的异常,正常情况下,小王每日开
2、车去上班,耗时大约30分钟,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,7,程序中的异常,public class Hello 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.ou
3、t.println(Java编程); break; case 3: System.out.println(SQL基础); ,输入:2 输出:Java编程,输入:B 程序中断运行!,正常情况:,异常情况:,8,什么是异常,异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,绕行或者等待,请求交警解决,异常!,面对异常该怎么办呢?通常情况下,我们会这样处理:,程序运行,程序中断运行,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,9,什么是异常处理,Java语言使用异常处理机制为程序提供了错误处理的能力,程序中预先想好了 对付异常的处理办法
4、,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,10,Java中如何进行异常处理,Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws,捕获异常,catch,try,finally,执行可能产生 异常的代码,捕获异常,无论是否发生异常, 代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要 抛出的各种异常,throws,11,try/catch块7-1,try,catch,try/catch 块后的代码段,public void method() try / 代码段(此处不会产生异常) catch (异常类
5、型 ex) / 对异常进行处理的代码段 / 代码段 ,使用try/catch块捕获异常,分为三种情况:,第一种情况,12,try/catch块7-2,使用示例模拟第一种情况:,public class Exception 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.pri
6、ntln(C#编程); break; 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块7-3,try,catch,异常类型匹配,try/catch 块后的代码段,进入catch块,public void method() try / 代码段 1 / 产生
7、异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,使用try/catch块捕获异常,分为三种情况:,第二种情况,产生异常对象,程序继续执行,异常是一种特殊的对象,类型为java.lang.Exception或其子类,发生异常,14,try/catch块7-4,使用示例模拟第二种情况:,public class Exception public static void main(String args) System.out.print(请输入课程代号(1至3之间的数字):); Scanner in = new Scanner(Sys
8、tem.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(输入不为数字!); ex.printStackTrace(); System.out.println(欢迎提出建议!); ,输入:B,输入不为数字! 异常
9、堆栈信息 欢迎提出建议!,控制台输出,15,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,public class Exception 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.printSta
10、ckTrace(); System.out.println(欢迎提出建议!); ,try/catch块7-5,16,try/catch块7-6,try,catch,异常类型不匹配,try/catch 块后的代码段,程序中断运行,发生异常,public void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,使用try/catch块捕获异常,分为三种情况:,第三种情况,产生异常对象,17,try/catch块7-7,使用示例模拟第三种情况:,public class Excepti
11、on2 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.out.println(SQL基础); catch (Nul
12、lPointerException ex) System.out.println(输入不为数字!); System.out.println(欢迎提出建议!); ,输入:B,程序中断运行,18,try/catch/finally 2-1,在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行,try 块,finally 块,catch 块,无异常,有异常,19,try/catch/finally 2-2,public class Exception3 public static void main(String args) System.out
13、.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(输入不为数字!); finally Sys
14、tem.out.println(欢迎提出建议!); ,输入:2,Java编程 欢迎提出建议!,控制台输出,输入:B,输入不为数字! 欢迎提出建议!,第一种情况: 无异常,第二种情况: 有异常,20,小结 1,编写一个类ExceptionTest1,在main方法中使用try、catch、finally: 在try块中,编写被0除的代码 在catch块中,捕获被0除所产生的异常,并且打印异常信息 在finally块中,打印一条语句,21,public void method() try / 代码段 / 产生异常(异常类型2) catch (异常类型1 ex) / 对异常进行处理的代码段 catc
15、h (异常类型2 ex) / 对异常进行处理的代码段 catch (异常类型3 ex) / 对异常进行处理的代码段 / 代码段 ,多重catch块 2-1,一段代码可能会引发多种类型的异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句 执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略,try,与异常类型1不匹配,try/catch 块后的代码段,发生异常,产生异常对象,catch,与异常类型2匹配,catch,catch,程序继续执行,进入catch块,22,多重catch块 2-2,public class Except
16、ion4 public static void main(String args) Scanner in = new Scanner(System.in); try System.out.print(“请输入S1的总学时:); int totalTime = in.nextInt(); /总学时 System.out.print(“请输入S1的课程数目:); int totalCourse = in.nextInt(); /课程数目 System.out.println(“S1各课程的平均学时为: + totalTime / totalCourse); catch (InputMismatch
17、Exception e1) System.out.println(输入不为数字!); catch (ArithmeticException e2) System.out.println(课程数目不能为零!); catch (Exception e) System.out.println(发生错误:+e.getMessage(); ,输入:270 H,在安排catch语句的顺序时,首先应该捕获最特殊的异常, 然后再逐渐一般化,即先子类后父类,输出: 输入不为数字!,进入第一个 catch块,输入:270 0,输出: 课程数目不能为零!,进入第二个 catch块,23,抛出异常,如果在当前环境无法
18、解决一个异常,就要将其抛出,把异常交给调用者处理,public class Teacher private String id; / 教员编号,长度应为7 public void setId(String pId) / 判断教员编号的长度是否为7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(参数长度应为7!); ,抛出异常: 在不使用try、catch语句或throws的前提下,只可以抛出运行时异常对象RuntimeException或其子类对象,如:NullPointerException、I
19、llegalArgumentException等,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!,控制台输出,24,声明异常,public class Teacher private String id;/ 教员
20、编号,长度应为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 args) AccpTeacher teacher = new AccpTeacher(); try teacher.setId(088); ca
21、tch (IllegalArgumentException ex) System.out.println(ex.getMessage(); ,由调用者捕获异常,声明该方法可能会产生异常,25,小结 2,编写类ExceptionTest2: 定义两个方法:go()和main() 在go方法中声明要抛出异常,在该方法体内,抛出一个Exception对象 在main()方法中,调用go方法,使用try/catch捕获go方法中抛出的异常,26,使用log4j记录日志信息,public class TeacherTest public static void main(String args) Tea
22、cher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); ,控制台输出,参数长度应为7!,如果想把错误信息保存到文件中,该如何处理?,使用log4j可以解决这个问题,log4j是一个流行的日志记录工具,这是使用log4j后,存储在文本文件中的日志信息,27,什么是日志,日志:用来记录一些重要的操作信息 有价值的日志数据能够帮助用户提前发现和避免灾难,并且找到事件发生的原因,public class Te
23、acherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); ,在控制台输出日志信息,提示用户出现错误的原因,28,如何使用log4j记录日志,项目 属性 :弹出项目的属性窗口,第一步:在工程中加入log4j所使用的jar文件,Java构建路径库添加外部JAR:弹出选择JAR的窗口,通过选择JAR的窗口,找到
24、log4j-1.2.x.jar,并确认,回到项目的属性窗口,点击确定,1,2,3,4,演示:在工程中加入log4j所使用的jar文件,29,如何使用log4j记录日志,第二步:创建perties文件,选择欲使用log4j的项目右键点击src 新建其他 :弹出选择向导窗口,在选择向导窗口中,选择常规 文件 下一步:弹出新建文件的窗口,在新建文件窗口中,输入文件名perties 完成:创建工作结束,1,2,3,30,如何使用log4j记录日志,第三步:使用log4j记录日志信息,import org.apache.log4j.Logger; public cla
25、ss TeacherLog4j public static void main(String args) Teacher teacher = new Teacher(); Logger logger = Logger.getLogger(AccpTeacherLog4j.class.getName(); try logger.debug(设置教员的编号。); teacher.setId(088); catch (IllegalArgumentException ex) (ex.getMessage(); ,获取日志记录器,这个记录器将负责控制日志信息,使用Logger对象
26、的debug、info方法输出日志信息,31,如何使用log4j记录日志,第四步:编写perties文件,配置日志信息,# 把日志信息输出到控制台 # log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%dyyyy-MM-dd HH:mm:ss %m%n # 把日志信息输出到文件:accp.log # log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=accp.log log4j.appende
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省黄石市大冶市部分校2026-2027学年八年级上学期11月期中考试生物试卷(含答案)
- 2026-2027学年天津市第七中学高二(上)期中物理试卷(含答案)
- 工程部创新课件
- 钢厂安全总结课件
- 2027年备考二建工程施工管理 题库及答案
- 2027年备考临床医师每日一练试题(备用卷)含答案
- 2027年备考VIP押题班.初级实务能力测验试题卷附答案
- 工程安全课件
- 干部做榜样课件
- 古巴社交课件
- 2026年昆明元朔建设发展有限公司收费员招聘(30人)笔试模拟试题及答案解析
- 2026年社会工作比赛模拟试题(含答案)
- 高温烫伤现场处置方案培训
- 2026 年初中英语《音标》专项练习与答案 (100 题)
- 公路养护机具安全培训课件
- GB/T 10454-2025包装非危险货物用柔性中型散装容器
- 【新教材】统编版(2024)八年级上册道德与法治全册教案
- 牙克石市矿产资源开发环境承载力评价报告
- 高考文言文考试单选题100道及答案
- 公共营养师基础知识
- 实验室内外部风险因素分析
评论
0/150
提交评论