使用异常处理程序错误ppt课件_第1页
使用异常处理程序错误ppt课件_第2页
使用异常处理程序错误ppt课件_第3页
使用异常处理程序错误ppt课件_第4页
使用异常处理程序错误ppt课件_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、回想q 什么是常量?Java中,常量的定义规则有哪些?q 什么是面向接口编程,它的好处是什么? 掌握Java的异常处理机制 运用 try 、catch 、 finally 处理异常 运用 throw 抛出异常 运用 throws 声明异常 掌握log4j的用法,能够记录异常日志本章目标生活中的异常 正常情况下,小王每日开车去上班,耗时大约30分钟 但是,异常情况迟早要发生!一路畅通一路畅通堵车!堵车!撞车!撞车!程序中的异常public class Hello public static void main(String args) System.out.print(请输入课程代号请输入课程代

2、号(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语言使用异常处理机制为程序提供了错误处理的能力程序中预先想好了程序中预先想好了 对付异常的处理办法对付异常的处理办法 异常!异常! 程序运行程序运行处理完毕,程序继续运行处理

4、完毕,程序继续运行对异常进行处理对异常进行处理Java中如何进行异常处理 Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws 捕获异常捕获异常 catchtryfinally执行可能产生执行可能产生 异常的代码异常的代码 捕获异常捕获异常 无论是否发生异常,无论是否发生异常,代码总能执行代码总能执行手动抛出异常手动抛出异常 抛出异常抛出异常 throw声明异常声明异常 声明方法可能要声明方法可能要抛出的各种异常抛出的各种异常 throwstry/catch块7-1trycatch try/catch 块后的代码段块后的代码段public

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

6、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.println(欢迎提出建议欢迎提出建议!);输入:输入:2Java编程编程欢迎提出建议欢迎提出建议!控制

7、台输出控制台输出try/catch块7-3trycatch异常类型匹配异常类型匹配 try/catch 块后的代码段块后的代码段进入进入catch块块public void method()try try / 代码段代码段 1 / 产生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5 使用try/catch块捕获异常,分为三种情况:第二种情况第二种情况 产生异常对象产生异常对象 程序继续执行程序继续执行异常是一种特殊的对象,类型为异常是一种特殊的对象,类型为java.lang.E

8、xception或其子类或其子类 发生异常try/catch块7-4 使用示例模拟第二种情况: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.println(C#编程编程);break;case 2:System

9、.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 Exception public

10、 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.out.println(欢迎提出建议欢迎提出建议!); try/catch块7-5java.

11、util.InputMismatchExceptionat 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. Exception.main(AccpException.java:23)异常类型异常类型异常堆栈信息异常堆栈信息在此方法中抛出了异常在此方

12、法中抛出了异常try/catch块7-6trycatch异常类型不匹配异常类型不匹配 try/catch 块后的代码段块后的代码段程序中断运行程序中断运行 发生异常public void method()try / 代码段代码段 1 / 产生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5 使用try/catch块捕获异常,分为三种情况:第三种情况第三种情况 产生异常对象产生异常对象 try/catch块7-7 使用示例模拟第三种情况:public class Exception

13、2 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基础基础)

14、; catch (NullPointerException ex) System.out.println(输入不为数字!输入不为数字!);System.out.println(欢迎提出建议!欢迎提出建议!);输入:输入:B程序中断运行程序中断运行try/catch/finally 2-1 在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行try 块块 finally 块块 catch 块块 无异常无异常 有异常有异常 try/catch/finally 2-2 public class Exception3 public static v

15、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 (Exceptio

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

17、y块中,打印一条语句完整代码实现完整代码实现public void method()try / 代码段代码段 / 产生异常产生异常(异常类型异常类型2) catch (异常类型异常类型1 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型2 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型3 ex) / 对异常进行处理的代码段对异常进行处理的代码段/ 代码段代码段多重catch块 2-1 一段代码可能会引发多种类型的异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句

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

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

20、t.println(课程数目不能为零课程数目不能为零!); catch (Exception e) System.out.println(发生错误发生错误:+e.getMessage();输入:输入:270 H 在安排在安排catch语句的顺序时,首先应该捕获最特殊的异常,语句的顺序时,首先应该捕获最特殊的异常, 然后再逐渐一般化,即先子类后父类然后再逐渐一般化,即先子类后父类 输出:输出:输入不为数字输入不为数字!进入第一个进入第一个catch块块输入:输入:270 0 输出:输出:课程数目不能为零课程数目不能为零!进入第二个进入第二个catch块块抛出异常 如果在当前环境无法解决一个异常,

21、就要将其抛出,把异常交给调用者处理 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的前提下,只可以抛出运行的前提下,只可以抛出运行时异常对象时异常对象

22、RuntimeException或其子类对象,如:或其子类对象,如:NullPointerException、IllegalArgumentException等等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(); 捕获异常捕获异常参数长度应为参数长度应为7!控制台输出控

23、制台输出声明异常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(Stri

24、ng args) Teacher teacher = new Teacher();try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 由调用者捕获异常由调用者捕获异常 声明该方法可能会产生异常声明该方法可能会产生异常 小结 2 编写类ExceptionTest2: 定义两个方法:go()和main() 在go方法中声明要抛出异常,在该方法体内,抛出一个Exception对象 在main()方法中,调用go方法,使用try/catch捕获go方法中抛出的异常

25、完整代码实现完整代码实现 使用log4j记录日志信息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(); 控制台输出控制台输出参数长度应为参数长度应为7! 如果想把错误信息如果想把错误信息保存到文件中,该保存到文件中,该如何处理?如何处理?使用使用log4j可以解决这个问

26、题,可以解决这个问题,log4j是一个流行的日志记录工具是一个流行的日志记录工具 这是使用这是使用log4j后,存储在文本文件中的日志信息后,存储在文本文件中的日志信息 什么是日志 日志:用来记录一些重要的操作信息 有价值的日志数据能够帮助用户提前发现和避免灾难,并且找到事件发生的原因 public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) S

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

28、的jar文件文件 如何使用log4j记录日志 第二步:创建perties文件选择欲使用选择欲使用log4j的项目的项目右键点击右键点击src 新建新建其他其他 :弹出选择向导窗口:弹出选择向导窗口在选择向导窗口中,选择常规在选择向导窗口中,选择常规 文件文件 下一步:弹出新建文件的窗口下一步:弹出新建文件的窗口在新建文件窗口中,输入文件名在新建文件窗口中,输入文件名perties 完成:创建工作结束完成:创建工作结束123演示:创建演示:创建perties文件文件 如何使用log4j记录日志 第三步:使用log4j记录日志信息import

29、org.apache.log4j.Logger;public class TeacherLog4j public static void main(String args) Teacher teacher = new Teacher(); Logger logger = Logger.getLogger(TeacherLog4j.class.getName(); try logger.debug(设置教员的编号。设置教员的编号。);teacher.setId(088); catch (IllegalArgumentException ex) (ex.getMessage(

30、); 获取日志记录器,获取日志记录器,这个记录器将负责这个记录器将负责控制日志信息控制日志信息 使用使用Logger对象的对象的debug、info方法方法输出日志信息输出日志信息 第四步:编写perties文件,配置日志信息# 把日志信息输出到控制台把日志信息输出到控制台 #log4j.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# 把日志信息输出到文件:把日志信息输出到文件:a.log #log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=a.loglog4j.appender.file.layout=org.apache.log4j.Patt

温馨提示

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

评论

0/150

提交评论