




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.,1,异常处理,.,2,目标,理解异常的概念运用try块、catch块和finally块处理异常运用多重catch块处理异常运用嵌套try/catch块处理异常运用关键字throw和throws处理异常运用JAVA编写和使用自定义异常,.,3,生活中的异常,正常情况下,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,.,4,程序中的异常,publicclassHelloAccppublicstaticvoidmain(Stringargs)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基础);,输入:1输出:C#编程,输入:abc程序中断运行!,正常情况:,异常情况:,.,5,什么是异常,异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序,绕行或者等待,请求交警解决,异常!,面对异常该怎么办呢?通常情况下,我们会这样处理:,程序运行,程序中断运行,堵车!,撞车!,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活,.,6,Exception,ArithmeticException,NullPointerException,Object,Throwable,Error,ThreadDeath,SQLException,RuntimeException,NumberFormatException,异常类的层次结构,Throwable具有两个子类,它们是Exception:处理用户程序应当捕获的异常情况Error:Error类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们,AWTError,.,7,Java异常类,文件结束,EOFException,找不到文件,FileNotFoundException,I/O异常的根类,IOException,数字转化格式异常,比如字符串到float型数字的转换无效,NumberFormatException,不能加载所需的类,ClassNotFoundException,方法接收到非法参数,IllegalArgumentException,数组大小小于或大于实际的数组大小,ArrayIndexOutOfBoundException,尝试访问null对象成员,NullPointerException,许多java.lang异常的基类,RuntimeException,异常层次结构的根类,Exception,算术错误情形,如以零作除数,ArithmeticException,线程中断,InterruptedException,说明,异常,.,8,什么是异常处理,Java编程语言使用异常处理机制为程序提供了错误处理的能力,程序中预先想好了对付异常的处理办法,异常!,程序运行,处理完毕,程序继续运行,对异常进行处理,.,9,Java中如何进行异常处理,Java的异常处理是通过5个关键字来实现的:try、catch、finally、throw、throws,捕获异常,catch,try,finally,执行可能产生异常的代码,捕获异常,无论是否发生异常,代码总能执行,手动抛出异常,抛出异常,throw,声明异常,声明方法可能要抛出的各种异常,throws,.,10,异常处理块的一般形式,try/要监控错误的代码块catch(Exceptione)/Exceptione的异常处理程序finally/在try结束前要执行的代码块,.,11,try/catch块,try,catch,try/catch块后的代码段,publicvoidmethod()try/代码段(此处不会产生异常)catch(异常类型ex)/对异常进行处理的代码段/代码段,使用try/catch块捕获异常,分为三种情况:,第一种情况,.,12,try/catch块7-2,使用示例模拟第一种情况:,publicclassAccpExceptionpublicstaticvoidmain(Stringargs)System.out.print(请输入1至3之间的数字:);Scannerin=newScanner(System.in);tryintcourseCode=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(欢迎提出建议!);,输入:2,Java编程欢迎提出建议!,控制台输出,.,13,try/catch块,try,catch,异常类型匹配,try/catch块后的代码段,进入catch块,publicvoidmethod()try/代码段1/产生异常的代码段2/代码段3catch(异常类型ex)/对异常进行处理的代码段4/代码段5,使用try/catch块捕获异常,分为三种情况:,第二种情况,产生异常对象,程序继续执行,异常是一种特殊的对象,类型为java.lang.Exception或其子类,发生异常,.,14,try/catch块7-4,使用示例模拟第二种情况:,publicclassAccpExceptionpublicstaticvoidmain(Stringargs)System.out.print(请输入1至3之间的数字:);Scannerin=newScanner(System.in);tryintcourseCode=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(欢迎提出建议!);,输入:abc,输入不为数字!异常堆栈信息欢迎提出建议!,控制台输出,.,15,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,publicclassAccpExceptionpublicstaticvoidmain(Stringargs)System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);tryintcourseCode=in.nextInt();/此处代码省略catch(Exceptionex)System.out.println(输入不为数字!);ex.printStackTrace();System.out.println(欢迎提出建议!);,try/catch块,.,16,try/catch块,try,catch,异常类型不匹配,try/catch块后的代码段,程序中断运行,发生异常,publicvoidmethod()try/代码段1/产生异常的代码段2/代码段3catch(异常类型ex)/对异常进行处理的代码段4/代码段5,使用try/catch块捕获异常,分为三种情况:,第三种情况,产生异常对象,.,17,try/catch块7-7,使用示例模拟第三种情况:,publicclassAccpException2publicstaticvoidmain(Stringargs)System.out.print(请输入课程代号(1至3之间的数字):);Scannerin=newScanner(System.in);tryintcourseCode=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(欢迎提出建议!);,输入:abc,程序中断运行,.,18,try/catch/finally,在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行,try块,finally块,catch块,无异常,有异常,.,19,try/catch/finally2-2,publicclassAccpException3publicstaticvoidmain(Stringargs)System.out.print(请输入1至3之间的数字:);Scannerin=newScanner(System.in);tryintcourseCode=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(输入不为数字!);finallySystem.out.println(欢迎提出建议!);,输入:2,Java编程欢迎提出建议!,控制台输出,输入:abc,输入不为数字!欢迎提出建议!,第一种情况:无异常,第二种情况:有异常,.,20,publicvoidmethod()try/代码段/产生异常(异常类型2)catch(异常类型1ex)/对异常进行处理的代码段catch(异常类型2ex)/对异常进行处理的代码段catch(异常类型3ex)/对异常进行处理的代码段/代码段,多重catch块2-1,一段代码可能会引发多种类型的异常当引发异常时,会按顺序来查看每个catch语句,并执行第一个与异常类型匹配的catch语句执行其中的一条catch语句之后,其后的catch语句将被忽略,try,与异常类型1不匹配,try/catch块后的代码段,发生异常,产生异常对象,catch,与异常类型2匹配,catch,catch,程序继续执行,进入catch块,.,21,多重catch块2-2,publicclassAccpException4publicstaticvoidmain(Stringargs)Scannerin=newScanner(System.in);trySystem.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块,.,22,抛出异常,如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理,publicclassAccpTeacherprivateStringid;/教员编号,长度应为7publicvoidsetId(StringpId)/判断教员编号的长度是否为7if(pId.length()=7)id=pId;elsethrownewIllegalArgumentException(参数长度应为7!);,publicclassAccpTeacherTestpublicstaticvoidmain(Stringargs)AccpTeacherteacher=newAccpTeacher();tryteacher.setId(088);catch(IllegalArgumentExceptionex)System.out.println(ex.getMessage();,抛出异常,捕获异常,参数长度应为7!,控制台输出,.,23,声明异常,publicclassAccpTeacherprivateStringid;/教员编号,长度应为7publicvoidsetId(StringpId)throwsIllegalArgumentException/判断教员编号的长度是否为7if(pId.length()=7)id=pId;elsethrownewIllegalArgumentException(参数长度应为7!);,publicclassAccpTeacherTestpublicstaticvoidmain(Stringargs)AccpTeacherteacher=newAccpTeacher();tryteacher.setId(088);catch(IllegalArgumentExceptionex)System.out.println(ex.getMessage();,由调用者捕获异常,声明该方法可能会产生异常,.,24,用户自定义异常,自定义异常概念使用自定义异常的时候JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常自定义异常需要继承Exception及其子类,.,25,用户自定义异常,创建一个类继承Exception或其子类为该异常类添加构造方法在一个方法中使用throw抛出异常在另一个方法中捕获并处理异常,classMyExceptionextendsExceptionprivateinti;MyException(inta)i=a;publicStringtoString()returni+大于10啦;,.,26,用户自定义异常2-3,publicclassExceptionDemostaticvoidgo(inta)throwsMyExceptionSystem.out.println(a=+a);if(a10)thrownewMyException(a);System.out.println(正常结束);publics
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 西药批发中的电子商务平台建设考核试卷
- 草原马术运动考核试卷
- 聚噻吩纤维在智能纺织品的应用考核试卷
- 融资租赁行业服务创新与客户体验考核试卷
- 谷物储存的温湿度调控考核试卷
- 拼多多平台店铺内容营销流量引入与品牌曝光合同
- 数字音乐平台影视插曲版权合作分成合同
- 独家授权网红奶茶区域代理销售服务合同
- 农业园区气象传感器租赁及数据分析服务合同
- 工业废水回用与清洁生产合作协议
- 2025全国助残日弘扬自强与助残精神凝聚团结奋进力量宣传课件
- 转让汽修店铺合同协议
- 2024年陕西延安通和电业有限责任公司招聘考试真题
- 自助贩卖机进驻合同协议
- 江苏绿色东海投资发展集团有限公司及下属子公司招聘笔试题库2025
- 公共组织绩效评估-形考任务三(占10%)-国开(ZJ)-参考资料
- 《非处方药品市场推广策略》课件
- 2025年广东省深圳市罗湖区中考英语二模试卷
- 输血法律法规知识培训课件
- 环卫工人安全知识培训课件
- 2024螺旋锥体挤土压灌桩技术标准
评论
0/150
提交评论