版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
§5-1程序运行异常Java语言程序设计教学目标任务分析在学生信息管理系统中,学生信息主要包含学号、姓名、性别、年龄、qq号等信息,程序执行时,用户通过控制台依次录入各项信息,当用户录入合法数据时程序可正常运行并得到预期结果;但如果用户因为误操作或输入非法数据时,则程序会引起意外终止。为此,我们在程序设计中应该如何避免这些意外的发生呢?教学内容1异常类异常23异常处理特点异常处理机制4一、异常但是,......!一路畅通堵车!撞车!正常情况下,大牛每日开车去上班,耗时大约30分钟一、异常异常是指在程序的执行过程中所发生的不正常的事件,会中断正在运行的程序异常程序运行程序中断运行一、异常程序中的错误分类编译错误、逻辑错误和运行错误。编译错误是因为程序存在语法问题,未能通过编译而产生的,由编译系统负责检测和报告,没有编译错误是一个程序运行的基本条件;逻辑错误是指程序不能按照预期的方案执行,它是机器本身无法检测的,需要人工对运行结果及程序逻辑进行分析,从中找出错误的原因;运行错误是程序运行过程中产生的错误,这类错误可能来自程序员没有预料到的各种情况,或者超出程序员控制的各种因素。如被零除、数组下标越界、不能打开指定的文件等,这类错误称为异常(Exception)也叫例外。二、异常类
Java中所有异常都是用类表示的。当程序发生异常时,会生成某个异常类的对象。Throwable是java.lang包中一个专门用来处理异常的类,它有两个直接子类:Error和Exception。二、异常类Error类Error类的异常为内部错误,包括动态链接失败、线程死锁、图形界面错误、虚拟机错误等,通常Java程序不能捕获这类异常,也不会抛弃这种异常。常见的错误类有:AnnotationFormatError、AssertionError、AWTError、LinkageError、CoderMalfunctionError、FactoryConfigurationError、ThreadDeath,VirtualMachineError、TransformerFactoryConfigurationError等。Exception类Exception处理用户程序应当捕获的异常情况,Java异常处理就是Exception的处理。二、异常类Exception又分为运行时异常和非运行时异常。“运行时异常”:是程序运行阶段才可能出现的异常,如果编码阶段不进行处理,不影响程序的编译。运行时异常包含所有运行时异常子类,如被零除、数组下标越界、空指针异常等,“非运行时异常”:如I/O异常等,SQL异常等。“非运行时异常”在编码阶段必须进行处理,如果不进行处理,则会导致编译出错。二、异常类异常类说明Exception异常层次结构的根类RuntimeException许多运行时异常的基类ArithmeticException算术错误,如以零作除数IllegalArgumentException方法接收到非法参数ArrayIndexOutOfBoundException数组大小小于或大于实际的数组大小NullPointerException尝试访问null对象的成员或方法NumberFormatException数字转化格式异常,比如字符串到int型数字的转换无效InputMismatchException输入不匹配异常IOExceptionI/O异常的根类FileNotFoundException找不到文件EOFException文件结束InterruptedException线程中断ClassNotFoundException不能加载所需的类常见的异常及其作用如表所示三、异常处理机制Java异常处理机制就是在程序代码执行过程中出现异常后,会按照我们预先制定的处理方法对异常进行处理,异常处理完成后,程序会继续运行下去。程序中预先制定的处理方法对异常进行处理产生异常!程序正常运行处理完毕,程序继续运行对异常进行处理三、异常处理机制Java语言提供两种处理异常的机制:捕获异常和声明抛弃异常1.捕获异常:在Java程序出现异常时,将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)异常。这是一种积极的异常处理机制。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。三、异常处理机制2.声明抛弃异常:当Java程序出现异常时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常,这是一种消极的异常处理机制。四、异常处理机制特点Java通过面向对象的方法进行异常处理,把各种不同的异常事件进行分类,体现了良好的层次性,提供了良好的接口,这种机制对于具有动态特性的复杂程序提供了强有力的控制方式。Java的异常处理机制使得处理异常的代码和常规代码分开,大大减少了代码量,增加了程序的可读性。任务实施同学们自己动手完成本节任务:在学生信息管理系统完成信息录入的代码测试输入合法数据,程序运行结果测试输入非法数据,程序是否崩溃定义一个字符串,键盘录入其信息,查看该字符串长度,输出该字符串中的最后一个字符,并将该字符串转为整数。最后尝试访问该字符串下标为length位置上的字符,查看是否可以正常访问。按“工单5-1”要求完成任务同步训练§5-2异常处理Java语言程序设计教学目标任务分析前面我们在录入学生信息时发现,用户如果不能录入正常信息会导致程序崩溃,我们无法保证用户每次都能按正确格式录入,但我们可以通过对用户可能会出现的问题提前进行处理,以保证程序不崩溃。教学内容1声明异常捕获异常2throw抛出异常3一、捕获异常捕获异常的try-catch-finally语句的其语法格式为:try{//可能会引发异常的代码}catch(ExceptionType1e){//对ExceptionType1的处理}catch(ExceptionType2e){//对ExceptionType2的处理}......finally{//该结构并非必须,但如果有,则否发生了异常,finally语句都会执行......//}捕获异常的第一步是用try{…}选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。一、捕获异常1.try每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数来指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。①如果try中代码没有出现异常,则不会进入catch块。②如果出现异常对象,则会依次与catch块中的异常类型进行验证,是否是属于该类型的异常,如果是,则进入该catch块,后续catch块不再继续验证,即不会再执行后续catch块。如何出现的异常对象不属于所有catch块中的异常,则无法捕获该异常,该异常依然会导致程序崩溃,所以为防止此种情况可以在最后的catch块设置捕获的异常类型为Exception类型。一、捕获异常2.catch捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态做统一的管理。一般是用来关闭文件或释放其他的系统资源。虽然finally作为try-catch-finally结构的一部分,但在程序中是可选的,也就是说可以没有finally语句。如果存在finally语句,不论try块中是否发生了异常,是否执行过catch语句,都要执行finally语句。一、捕获异常3.finally示例代码当数组下标超界时,捕获异常publicstaticvoidmain(Stringargs[]){ Stringstr[]={"北京","山东","上海"}; inti=0; while(i<4){ try{ System.out.println(str[i]); }catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("数组下标越界"); }finally{ System.out.println("这行信息总是会打印,无论是否出现异常"); } i++; }}二、声明异常
当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。如果方法中有可能抛出多个异常,异常列表中要一一列出,各异常之间用逗号隔开。语法如下:修饰符返回类型方法名(参数列表)throws异常列表{方法体;}如:publicvoidmyMethod()throwsIOException{……}说明:通过使用throws声明异常的方法,该方法自己不处理本方法中产生的异常,而是由调用它的方法来处理这些异常。三、throw抛出异常
除程序编译或运行阶段系统自动抛出异常外,用户还可以根据实际需求手动通过throw关键字抛出异常。其一般格式为:thrownewXxxException();或
XxxException()ex=newXxxException();throwex;
如果手动抛出的为非运行时异常,则throw所在方法必须是通过throws关键字声明了异常的方法,或使用try-catch对该非运行时异常进行处理。四、自定义异常
尽管Java提供了相当多的异常类,但Exception提供的系统异常并不一定总能捕获程序中发生的所有错误。当用户遇到了系统预定义的异常类不能描述的问题时,还需要创建用户自定义的异常,比如在银行系统中存钱的数据如果小于0即为一种异常现象。
用户定义的异常必须继承自Throwable、Exception类或Exception的其他子类。语法:publicclass类名extends异常类名{//类体}
自定义的异常必须由用户自己抛出throw,格式为:thrownew自定义异常类名()示例代码自定义存款异常类BalanceException继承继承自
ExceptionpublicclassBalanceExceptionextendsException{ publicBalanceException(){} publicBalanceException(Stringmessage){//带参构造方法,指定异常消息 super(message); }
}示例代码//定义银行类Bank,该类具有存款方法publicclassBank{ //存款方法,判断存款金额如果为负数,则声明抛出BalanceException publicstaticvoiddeposit(intbalance)throwsBalanceException{ if(balance<0){ //创建自定义异常对象 BalanceExceptionbalanceException=newBalanceException("存款不能为负数"); //抛出异常
throwbalanceException; }else{ System.out.println("存款成功"); } }示例代码
//在main方法调用存款方法 publicstaticvoidmain(String[]args){ intbalance; Scannersc=newScanner(System.in); System.out.println("请输入存款金额:"); balance=sc.nextInt(); //使用try-catch处理BalanceException try{ deposit(balance); }catch(Exceptione){ e.printStackTrace(); } }}
测试输入金额为正数和负数shi任务实施使用try-catch-finally解决因
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电池制造中的自动化生产线改进与机器人应用考核试卷
- 《YL公司离任经济责任审计问题研究》
- 2024至2030年中国长寿正檀香数据监测研究报告
- 动漫与科技融合发展
- 城市文化墙建设项目2024年协议
- 《美的集团并购德国库卡的财务风险控制研究》
- 2024至2030年中国背包式油压千斤顶数据监测研究报告
- 《大脑中动脉粥样硬化患者血管重构模式及相关因素的高分辨率MRI研究》
- 2024至2030年中国空气吹淋室数据监测研究报告
- 2024年防水材料交易协议样本
- 拆除防尘施工方案
- 幼儿园中小学消防安全知识教育班会
- 重庆市2023-2024学年一年级上学期期中练习语文试题
- 人教版七年级下册数学第八章二元一次方程组应用题-方案问题
- 安全生产规章制度和岗位操作规程的目录清单及内容(无仓储经营单位)
- 建构主义视角下幼儿园中班阅读区创设与指导研究
- 托管安全责任承诺书范文(19篇)
- -常规化验单解读
- BYK-润湿分散剂介绍
- 2023年口腔医学期末复习-牙周病学(口腔医学)考试历年真题集锦带答案
- 函数的概念 省赛获奖
评论
0/150
提交评论