异常.pptx

上传人:b****1 文档编号:1733656 上传时间:2022-10-23 格式:PPTX 页数:31 大小:251.63KB
下载 相关 举报
异常.pptx_第1页
第1页 / 共31页
异常.pptx_第2页
第2页 / 共31页
异常.pptx_第3页
第3页 / 共31页
异常.pptx_第4页
第4页 / 共31页
异常.pptx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

异常.pptx

《异常.pptx》由会员分享,可在线阅读,更多相关《异常.pptx(31页珍藏版)》请在冰豆网上搜索。

异常.pptx

异常,1/39,本章目标,熟悉使用try-catch-finally处理异常会使用throw、throws抛出异常掌握异常及其分类使用log4j记录日志,2/39,生活中的异常,正常情况下,小王每日开车去上班,耗时大约30分钟,3/39,但是,异常情况迟早要发生!

一路畅通,堵车!

撞车!

程序中的异常2-1,以下程序运行时会出现错误吗?

4/39,publicclassTest1publicstaticvoidmain(Stringargs)Scannerin=newScanner(System.in);System.out.print(请输入被除数:

);intnum1=in.nextInt();System.out.print(请输入除数:

);intnum2=in.nextInt();System.out.println(String.format(%d/%d=%d,num1,num2,num1/num2);System.out.println(感谢使用本程序!

);,代码阅读,程序中的异常2-2,如何解决该问题呢?

5/39,publicclassTest2publicstaticvoidmain(Stringargs)Scannerin=newScanner(System.in);System.out.print(请输入除数:

);intnum2=0;if(in.hasNextInt()/如果输入的除数是整数num2=in.nextInt();if(0=num2)/如果输入的除数是0System.err.println(输入的除数是0,程序退出。

);System.exit

(1);else/如果输入的除数不是整数System.err.println(输入的除数不是整数,程序退出。

);System.exit

(1);,尝试通过if-else来解决异常问题,弊端:

1、代码臃肿2、程序员要花很大精力“堵漏洞”3、程序员很难堵住所有“漏洞”,使用异常机制,提问,什么是异常,异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,6/39,绕行或者等待,请求交警解决,异常,生活中面对异常通常会这样处理,程序运行,程序中断运行,堵车!

撞车!

生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活,什么是异常处理,Java编程语言使用异常处理机制为程序提供了错误处理的能力,7/39,程序中预先设置好对付异常的处理办法,异常,程序运行,处理完毕,程序继续运行,对异常进行处理,Java中如何进行异常处理,Java的异常处理是通过5个关键字来实现的:

try、catch、finally、throw、throws,8/39,捕获异常,catch,try,finally,执行可能产生异常的代码,捕获异常,无论是否发生异常,代码总能执行,手动抛出异常,throw,声明方法可能要抛出的各种异常,throws,声明异常,抛出异常,try-catch块5-1,使用try-catch块捕获异常,分为三种情况:

9/39,try,catch,try-catch块后的代码段,publicvoidmethod()try/代码段(此处不会产生异常)catch(异常类型ex)/对异常进行处理的代码段/代码段,第一种情况:

正常,try-catch块5-2,使用try-catch块捕获异常,分为三种情况:

10/39,try,异常类型匹配,try-catch块后的代码段,进入catch块,publicvoidmethod()try/代码段1/产生异常的代码段2/代码段3catch(异常类型ex)/对异常进行处理的代码段4/代码段5,第二种情况:

出现异常,产生异常对象,程序继续执行,异常是一种特殊的对象,类型为java.lang.Exception或其子类,发生异常,catch,try-catch块5-3,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,11/39,java.util.InputMismatchExceptionatjava.util.Scanner.throwFor(Scanner.java:

840)atjava.util.Scanner.next(Scanner.java:

1461)atjava.util.Scanner.nextInt(Scanner.java:

2091)atjava.util.Scanner.nextInt(Scanner.java:

2050)atcn.exception.Test3.main(Test3.java:

15),异常类型,异常堆栈信息,在此方法中抛出了异常,出现异常的位置,try-catch块5-4,使用try-catch块捕获异常,分为三种情况:

12/39,try,catch,异常类型不匹配,try-catch块后的代码段,程序中断运行,发生异常,publicvoidmethod()try/代码段1/产生异常的代码段2/代码段3catch(异常类型ex)/对异常进行处理的代码段4/代码段5,第三种情况:

异常类型不匹配,产生异常对象,try-catch块5-5,在catch块中处理异常加入用户自定义处理信息调用方法输出异常信息异常对象常用的方法,13/39,e.printStackTrace();,System.err.println(出现错误:

被除数和除数必须是整数,”+除数不能为零。

);,常见的异常类型,14/39,try-catch-finally2-1,在try-catch块后加入finally块是否发生异常都执行不执行的唯一情况,15/39,try块,finally块,catch块,无异常,有异常,System.exit

(1),中断程序,退出Java虚拟机,try-catch-finally2-2,存在return的try-catch-finally块,16/39,try,catchreturn,异常类型匹配,发生异常,publicvoidmethod()try/代码段1/产生异常的代码段2catch(异常类型ex)/对异常进行处理的代码段3return;finally/代码段4,产生异常对象,finally,进入catch块,执行return退出方法,执行finally块,try块中有return语句执行过程与此类似,2,1,3,4,多重catch块,引发多种类型的异常排列catch语句的顺序:

先子类后父类发生异常时按顺序逐个匹配只执行第一个与异常类型匹配的catch语句,17/39,publicvoidmethod()try/代码段/产生异常(异常类型2)catch(异常类型1ex)/对异常进行处理的代码段catch(异常类型2ex)/对异常进行处理的代码段catch(异常类型3ex)/对异常进行处理的代码段/代码段,try,与异常类型1不匹配,try-catch块后的代码段,发生异常,产生异常对象,catch,与异常类型2匹配,catch,catch,程序继续执行,进入catch块,小结,18/39,面试题:

try-catch块中存在return语句,是否还执行finally块,如果执行,说出执行顺序try-catch-finally块中,finally块唯一不执行的情况是什么?

提问,操作根据编号输出课程名称,需求说明:

按照控制台提示输入13之间任一个数字,程序将输出相应的课程名称根据键盘输入进行判断。

如果输入正确,输出对应课程名称。

如果输入错误,给出错误提示不管输入是否正确,均输出“欢迎提出建议”语句,19/39,练习,声明异常,如果在一个方法体中抛出了异常,如何通知调用者?

20/39,提问,throws声明某个方法可能抛出的各种异常,publicclassTest7publicstaticvoiddivide()throwsException/可能出现异常的代码publicstaticvoidmain(Stringargs)trydivide();catch(Exceptione)e.printStackTrace();/publicstaticvoidmain(Stringargs)throwsException/divide();/,声明异常,多个异常用逗号隔开,方式2:

调用者继续声明异常,方式1:

调用者处理异常,main方法声明的异常由Java虚拟机处理,抛出异常,除了系统自动抛出异常外,有些问题需要程序员自行抛出异常,21/39,publicclassPersonprivateStringname=;/姓名privateintage=0;/年龄privateStringsex=男;/性别publicvoidsetSex(Stringsex)throwsExceptionif(男.equals(sex)|女.equals(sex)this.sex=sex;elsethrownewException(“性别必须是男或者女!

);,抛出异常,异常的分类2-1,22/39,仅靠程序本身无法恢复的严重错误,Exception和Error类的父类,由Java应用程序抛出和处理的非严重错误,运行时异常,不要求程序必须做出处理,Checked异常,程序必须处理该类异常,小结,23/39,23/35,面试题:

说出5个常见的运行时异常throw与throws的区别是什么?

提问,操作使用throw抛出异常,需求说明:

在setAge(intage)中对年龄进行判断,如果年龄介于1到100直接赋值,否则抛出异常在测试类中创建对象并调用setAge(intage)方法,使用try-catch捕获并处理异常,24/39,完成时间:

15分钟,练习,开源日志记录工具log4j,如何实现以文件形式记录异常信息、程序正常运行的关键步骤信息?

使用开源日志记录工具log4j来实现,25/39,问题,分析,日志及分类,日志(log)主要用来记录系统运行中一些重要操作信息便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因日志分类SQL日志、异常日志、业务日志log4j是一个非常优秀的开源日志记录工具控制日志的输出级别控制日志信息输送的目的地是控制台、文件等控制每一条日志的输出格式,26/39,使用log4j记录日志2-1,使用log4j记录日志步骤,27/39,使用log4j记录日志2-2,配置日志信息,28/39,#设置Logger输出级别和输出目的地#log4j.rootLogger=debug,stdout,logfile#把日志信息输出到控制台#log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.errlog4j.appender.stdout.layout=org.apache.log4j.SimpleLayout#把日志信息输出到文件:

lkw.log#log4j.appender.logfile=org.apache.log4j.FileAppenderlog4j.appender.logfile.File=lkw.loglog4j.appender.logfile.layout=org.apache.log4j.PatternLayoutlog4j.appender.logfile.layout.ConversionPattern=%dyyyy-MM-ddHH:

mm:

ss%l%F%p%m%n,日志信息写到文件中,指定日志输出的文件名,指定日志布局类型,日志信息输出到控制台,信息打印到System.err上,指定日志布局类型,日志记录器输出级别:

fataler

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

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1