使用异常处理程序错误

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

使用异常处理程序错误第十五讲2回顾什么是常量?Java中,常量的定义规则有哪些?什么是面向接口编程,它的好处是什么?3预习检查什么是异常?Java中,如何进行异常处理?请说明throw与throws的区别与联系?4本章任务升级Hello,完成如下功能:根据课程代码输出课程名称输出各学期平均课时等信息使用log4j记录异常日志5掌握Java的异常处理机制运用try、catch、finally处理异常运用throw抛出异常运用throws声明异常掌握log4j的用法,能够记录异常日志本章目标6生活中的异常正常情况下,小王每日开车去上班,耗时大约30分钟但是,异常情况迟早要发生!一路畅通堵车!撞车!7程序中的异常publicclassHello{publicstaticvoidmain(String[]args){System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);intcourseCode=in.nextInt();//从键盘输入整数switch(courseCode){case1:System.out.println(C#编程);break;case2:System.out.println(Java编程);break;case3:System.out.println(SQL基础);}}}输入:2输出:Java编程输入:B程序中断运行!正常情况:异常情况:8什么是异常异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序绕行或者等待请求交警解决异常!面对异常该怎么办呢?通常情况下,我们会这样处理:程序运行程序中断运行堵车!撞车!生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活9什么是异常处理Java语言使用异常处理机制为程序提供了错误处理的能力程序中预先想好了对付异常的处理办法异常!程序运行处理完毕,程序继续运行对异常进行处理10Java中如何进行异常处理Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws捕获异常catchtryfinally执行可能产生异常的代码捕获异常无论是否发生异常,代码总能执行手动抛出异常抛出异常throw声明异常声明方法可能要抛出的各种异常throws11try/catch块7-1trycatchtry/catch块后的代码段publicvoidmethod(){try{//代码段(此处不会产生异常)}catch(异常类型ex){//对异常进行处理的代码段}//代码段}使用try/catch块捕获异常,分为三种情况:第一种情况12try/catch块7-2使用示例模拟第一种情况:publicclassException{publicstaticvoidmain(String[]args){System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){case1:System.out.println(C#编程);break;case2:System.out.println(Java编程);break;case3:System.out.println(SQL基础);}}catch(Exceptionex){System.out.println(输入不为数字!);}System.out.println(欢迎提出建议!);}}输入:2Java编程欢迎提出建议!控制台输出13try/catch块7-3trycatch异常类型匹配try/catch块后的代码段publicvoidmethod(){try{//代码段1//产生异常的代码段2//代码段3}catch(异常类型ex){//对异常进行处理的代码段4}//代码段5}使用try/catch块捕获异常,分为三种情况:第二种情况产生异常对象程序继续执行异常是一种特殊的对象,类型为java.lang.Exception或其子类14try/catch块7-4使用示例模拟第二种情况:publicclassException{publicstaticvoidmain(String[]args){System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){case1:System.out.println(C#编程);break;case2:System.out.println(Java编程);break;case3:System.out.println(SQL基础);}}catch(Exceptionex){System.out.println(输入不为数字!);ex.printStackTrace();}System.out.println(欢迎提出建议!);}}输入:B输入不为数字!异常堆栈信息欢迎提出建议!控制台输出15printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程publicclassException{publicstaticvoidmain(String[]args){System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();//此处代码省略}catch(Exceptionex){System.out.println(输入不为数字!);ex.printStackTrace();}System.out.println(欢迎提出建议!);}}try/catch块7-5java.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)ats2jsp.sg.ch05.AccpException.main(AccpException.java:23)异常类型异常堆栈信息在此方法中抛出了异常16try/catch块7-6trycatch异常类型不匹配try/catch块后的代码段程序中断运行发生异常publicvoidmethod(){try{//代码段1//产生异常的代码段2//代码段3}catch(异常类型ex){//对异常进行处理的代码段4}//代码段5}使用try/catch块捕获异常,分为三种情况:第三种情况产生异常对象17try/catch块7-7使用示例模拟第三种情况:publicclassException2{publicstaticvoidmain(String[]args){System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){case1:System.out.println(C#编程);break;case2:System.out.println(Java编程);break;case3:System.out.println(SQL基础);}}catch(NullPointerExceptionex){System.out.println(输入不为数字!);}System.out.println(欢迎提出建议!);}}输入:B程序中断运行18try/catch/finally2-1在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行try块finally块catch块无异常有异常19try/catch/finally2-2publicclassException3{publicstaticvoidmain(String[]args){System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);try{intcourseCode=in.nextInt();switch(courseCode){case1:System.out.println(C#编程);break;case2:System.out.println(Java编程);break;case3:System.out.println(SQL基础);}}catch(Exceptionex){System.out.println(输入不为数字!);}finally{System.out.println(欢迎提出建议!);}}}输入:2Java编程欢迎提出建议!控制台输出输入:B输入不为数字!欢迎提出建议!第一种情况:无异常第二种情况:有异常20小结1编写一个类ExceptionTest1,在main方法中使用try、catch、finally:在try块中,编写被0除的代码在catch块中,捕获被0除所产生的异常,并且打印异常信息在finally块中,打印一条语句21publicvoidmethod(){try{//代码段//产生异常(异常类型2)}catch(异常类型1ex){//对异常进行处理的代码段}catch(异常类型2ex){//对异常进行处理的代码段}catch(异常类型3ex){//对异常进行处理的代码段}//代码段}多重catch块2-1一段代码可能会引发多种类型的异常当引发异常时,会按顺序来查看每个catch语句,并执行第一个与异常类型匹配的catch语句执行其中的一条catch语句之后,其后的catch语句将被忽略try与异常类型1不匹配try/catch块后的代码段发生异常产生异常对象catch与异常类型2匹配catchcatch程序继续执行22多重catch块2-2publicclassException4{publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);try{System.out.print(“请输入S1的总学时:);inttotalTime=in.nextInt();//总学时System.out.print(“请输入S1的课程数目:);inttotalCourse=in.nextInt();//课程数目System.out.println(“S1各课程的平均学时为:+totalTime/totalCourse);}catch(InputMismatchExceptione1){System.out.println(输入不为数字!);}catch(ArithmeticExceptione2){System.out.println(课程数目不能为零!);}catch(Exceptione){System.out.println(发生错误:+e.getMessage());}}}输入:270H在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化,即先子类后父类输出:输入不为数字!进入第一个catch块输入:2700输出:课程数目不能为零!进入第二个catch块23抛出异常如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理public

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功