第十章--Java异常处理机制_第1页
第十章--Java异常处理机制_第2页
第十章--Java异常处理机制_第3页
第十章--Java异常处理机制_第4页
第十章--Java异常处理机制_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、第十章 Java的异常处理机制本讲内容 Java异常处理机制 常见的Java异常类 try/catch/finally/throw/throws的使用 自定义异常 Log4j日志记录工具的使用本讲目标 掌握如何进行java异常处理。 try/catch/finally/throw/throws的使用 Log4j日志记录工具的使用异常及异常处理public class Test1 public static void main(String args) Scanner in = new Scanner(System.in);System.out.print(请输入被除数请输入被除数:);int

2、num1 = in.nextInt();System.out.print(请输入除数请输入除数:);int num2 = in.nextInt();System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2);System.out.println(感谢使用本程序!感谢使用本程序!);如果由如果由Java系统来堵漏洞,那程序员系统来堵漏洞,那程序员就轻松多了!就轻松多了!Java就是这么做的!就是这么做的!异常机制异常机制异常 异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序 Java编程语言使

3、用异常处理机制为程序提供了错误处理的能力程序中预先想好了程序中预先想好了 对付异常的处理办法对付异常的处理办法 异常!异常! 程序运行程序运行处理完毕,程序继续运行处理完毕,程序继续运行对异常进行处理对异常进行处理异常 异常(Exception)是程序执行过程中出现的非正常事件,即各种意外情况。如: 所需文件找不到 网络连接不通或中断 算术运算错 (被零除) 数组下标越界 装载一个不存在的类或者对null对象操作 类型转换异常 当Java程序出现以上的异常时,就会在所处的方法中产生一个异常对象。这个异常对象包括异常的类型,异常出现时程序的运行状态以及对该异常的详细描述。java异常 java异

4、常 异常是程序中的一些错误,但并非所有的错误都是异常,并且错误有时候是可以避免的。 在Java语言中,产生异常现象的错误大体分为3类: 编译错误 运行错误 逻辑错误。java异常 编译错误 编译错误是由于所编写的程序存在语法问题,未能通过由源代码到字节码的编译而产生的,它由语言的编译系统负责检测和报告。此类错误在编译的时候会被检查出来,并不会生成运行代码,只有更正程序中的语法问题后才可以运行程序。常见的有:大小写混淆 、数据类型与变量类型不符、使用未声明的变量等 。java异常 运行错误 运行错误是指程序在执行过程中发生的错误,它会中断程序的正常执行。例如,计算时除数为零、数组下标越界、文件没

5、找到等。这类错误在编译程序时一般是无法发现的。常见的有:数组下标越界 、除数为零等 。java异常 逻辑错误 逻辑运行错误是指程序不能实现编程人员的设计意图和设计功能而产生的错误,即程序运行后没有得到预期的结果。该类错误从语法上来说是有效的,只是程序在逻辑上存在着缺陷。通常,逻辑错误不会产生错误提示信息,所以错误较难排除。常见的有:超出数据类型的取值范围 、语句体忘记加大括号等 。如何进行异常处理 Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws 捕获异常捕获异常 catchtryfinally执行可能产生执行可能产生 异常的代码异常的

6、代码 捕获异常捕获异常 无论是否发生异常,无论是否发生异常,代码总能执行代码总能执行手动抛出异常手动抛出异常 抛出异常抛出异常 throw声明异常声明异常 声明方法可能要声明方法可能要抛出的各种异常抛出的各种异常 throws异常处理实现 由四个关键字 try、catch、finally和 throws 处理。 Java 中可用于处理异常的两种方式: 自行处理:可能引发异常的语句封入在 try 块内,而处理异常的相应语句则封入在 catch 块内。即:try-catch-finally语句捕获异常:try catch( Exception e) finally 回避异常:方法声明时用throw

7、s声明方法体内有异常try/catch块 使用try/catch块捕获异常,分为三种情况:trycatchpublic void method()try / 代码段代码段(此处不会产生异常此处不会产生异常) catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段/ 代码段代码段第一种情况第一种情况 trycatch try/catch 块后的代码段块后的代码段try/catch块trycatch异常类型匹配异常类型匹配 try/catch 块后的代码段块后的代码段进入进入catch块块public void method()try / 代码段代码段 1 / 产

8、生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5第二种情况第二种情况 产生异常对象产生异常对象 程序继续执行程序继续执行异常是一种特殊的对象,类型为异常是一种特殊的对象,类型为java.lang.Exception或其子类或其子类 发生异常发生异常try/catch块trycatch异常类型不匹配异常类型不匹配 try/catch 块后的代码段块后的代码段程序中断运行程序中断运行 发生异常发生异常public void method()try / 代码段代码段 1 / 产生异常

9、的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5第三种情况第三种情况 产生异常对象产生异常对象 try/catch/finally块 在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行try 块块 finally 块块 catch 块块 无异常无异常 有异常有异常 异常堆栈信息 printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程 java.util.InputMismatchExceptionat ja

10、va.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 cn.jbit.exception.Test3.main(Test3.java:15)异常类型异常类型异常堆栈信息异常堆栈信息在此方法中抛出了异常在此方法中抛出了异常出现异常的位置出现异常的位置常见异常类方 法 名说 明Excepti

11、on 异常层次结构的根类ArithmeticException算术错误情形,如以零作除数ArrayIndexOutOfBoundsException数组下标越界NullPointerException尝试访问 null 对象成员ClassNotFoundException不能加载所需的类InputMismatchException欲得到数据类型与实际输入类型不匹配IllegalArgumentException方法接收到非法参数ClassCastException对象强制类型转换出错NumberFormatException数字格式转换异常,如把abc转换成数字仅靠程序本身无法恢复仅靠程序本身

12、无法恢复的严重错误的严重错误 Exception和和Error类的父类类的父类由由Java应用程序抛出和处应用程序抛出和处理的非严重错误理的非严重错误 运行时异常,不要运行时异常,不要求程序必须对它们求程序必须对它们做出处理做出处理 Checked异常,程序必须处异常,程序必须处理该类异常理该类异常异常的分类多重catch块一段代码可能会引发多种类型的异常,但异常类型必须是层层嵌套的,即先从子类异常,最后才到父类异常。 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略 publi

13、c void method()try / 代码段代码段 / 产生异常产生异常(异常类型异常类型2) catch (异常类型异常类型1 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型2 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型3 ex) / 对异常进行处理的代码段对异常进行处理的代码段/ 代码段代码段try 与异常类型与异常类型1不匹配不匹配try/catch 块后的代码段块后的代码段发生异常发生异常产生异常对象产生异常对象catch与异常类型与异常类型2匹配匹配catchcatch程序继续执行程序继续执行

14、进入进入catch块块抛出异常 如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理 public class Teacher private String id; / 教员编号,长度应为教员编号,长度应为7 public void setId(String pId) / 判断教员编号的长度是否为判断教员编号的长度是否为7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(参数长度应为参数长度应为7!); public class TeacherTest public static vo

15、id main(String args) Teacher teacher = new Teacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 抛出异常抛出异常捕获异常捕获异常参数长度应为参数长度应为7!控制台输出控制台输出使用log4j记录日志信息public class TeacherTest public static void main(String args) Teacher teacher = new Teacher(); tr

16、y teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 控制台输出控制台输出参数长度应为参数长度应为7! 如果要在控制台与文件如果要在控制台与文件中同时输出错误信息,中同时输出错误信息,该如何处理?该如何处理?使用使用log4j可以解决这个问题,可以解决这个问题,log4j是一个流行的日志记录工具是一个流行的日志记录工具 这是使用这是使用log4j后,存储在文本文件中的日志信息后,存储在文本文件中的日志信息 什么是日志 日志:用来记录一些重要的操作信息 有价值的日

17、志数据能够帮助用户提前发现和避开灾难,并且找到事件发生的原因 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(); 在控制台输出日志信在控制台输出日志信息,提示用户出现错息,提示用户出现错误的原因误的原因 如何使用log4j记录日志项目项目 属性属性 :弹出项目的属性窗口

18、:弹出项目的属性窗口 第一步:在工程中加入log4j所使用的jar文件Java构建路径构建路径库库添加外部添加外部JAR:弹出选择:弹出选择JAR的窗口的窗口通过选择通过选择JAR的窗口,找到的窗口,找到log4j-1.2.x.jar,并确认,并确认回到项目的属性窗口,点击确定回到项目的属性窗口,点击确定1234如何使用log4j记录日志 第二步:创建perties文件选择欲使用选择欲使用log4j的项目的项目右键点击右键点击src 新建新建其他其他 :弹出选择向导窗口:弹出选择向导窗口在选择向导窗口中,选择常规在选择向导窗口中,选择常规 文件文件 下一步:弹出新建文件的窗口

19、下一步:弹出新建文件的窗口在新建文件窗口中,输入文件名在新建文件窗口中,输入文件名perties 完成:创建工作结束完成:创建工作结束123如何使用log4j记录日志 第三步:使用log4j记录日志信息import org.apache.log4j.Logger;public class TeacherLog4j public static void main(String args) Teacher teacher = new Teacher(); Logger logger = Logger.getLogger(TeacherLog4j.class.getName();

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

21、=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.appende

22、r.file.File=mylog.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上上 指定输出格式:指定输出格式:显示日期,日志发生位置显示日期,日志发生位置和日志信息和日志信息 输出源名称输出源名称优先级从高到低分别是优先级从高到低分别是ERROR、WARN、INFO、DEBUG 在此处,如果优先级别设为在此处,如果优先级别设为info,那么使用,那么使用debug方法打印的日志信息将不被输出方法打印的日志信息将不被输出 小

温馨提示

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

评论

0/150

提交评论