




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章 异常与异常处理,异常(Exception),异常是指在程序中,发生错误影响程序正常运行的语句或结构。 Java编译器能在很大程度上帮我们发现程序中会出现的错误。但是并不是所有错误都能在编译期间被发现。 有些错误和问题必须在程序运行的过程中才能被发现,本章主要针对这些异常进行说明。,获得异常的方式,在Java程序运行的过程中,有两种获得异常的方式。 一是程序执行过程中发生了Java语言已经定义的异常(所有这些异常大多定义在java.lang包中,并都作为Exception类的子类存在),这些标准异常将被程序自动抛出(throw)。 二是在程序中定义自己需要的异常情况,在程序执行过程中检测
2、错误是否发生,如发生错误则由发生该错误的方法抛出(throw)自己定义的异常。,定义自己的异常类,在Java中,所有执行过程中发生的异常都作为Exception的子类存在。 自定义异常可以继承Exception类的所有属性和方法,也可以添加自己定义的属性和方法。同时自定义异常也可以通过定义同名方法来覆盖父类的方法。,类的toString方法,在Java中,我们经常遇到需要将不可见的类或对象转换成直观可见的字符串的情况。如将一个对象实例使用System.out.println方法打印在屏幕上。 Java中可以在类中定义一个方法toString来实现对象到字符串的转换工作。当需要字符串的地方使用了
3、对象实例时,Java编译程序将会自动调用toString方法,将对象实例转换为字符串。 toString方法的定义格式可以描述为 public String toString() /函数体 ,抛出异常,在程序中,如需抛出异常可使用关键字throw。语法是:throw 异常对象实例; 一般地,Java语言定义好的标准异常会被程序自己抛出,无须再使用throw语句抛出标准异常。,抛出异常的方法定义,如果一个方法运行过程中产生了异常,且方法自身没有处理该异常,则在该方法的声明中需要使用throws关键字说明该方法的所有未被处理的异常。 语法: 访问 类型 返回值 方法名(参数列表) throws 未
4、被处理的异常列表,未处理的异常,Java中所有未被编程人处理的异常将会按照默认方式进行处理。即打印出该异常发生的确切位置,并退出程序的运行。 在Exception的父类Throwable中定义了方法printStackTrace,该方法可以打印出异常发生时程序堆栈的情况(通俗的说就是异常发生的位置)。,异常处理,当某个被调用的方法抛出异常后,我们通常不希望采用默认的方式处理,特别是大多数情况中,我们希望程序能继续运行,这样我们才能提供更加健壮的程序。例如在发送消息失败时,我们并不希望退出我们的即时通讯软件(IM)。 因此我们需要自己处理程序中可能发生的异常,异常处理的过程可以归纳为:监控捕获响
5、应三个主要步骤。,监控异常,为了让Java能够知道我们需要自己处理发生的异常,我们必须将可能发生异常的语句监控起来。 监控的语法: try /可能发生异常的语句块 ,捕获异常,在执行try语句块的过程中,如果发生了异常,我们必须捕获这个异常。 捕获异常的语法: catch(异常类名 异常对象实例) 由于try结构块中的语句在执行过程中可能发生多种不同的异常,因此我们可以使用多个catch以捕获多个异常。一个catch只能捕获一个异常。,响应异常,当异常发生并且被捕获后,我们需要对该异常进行的处理写在catch后的结构块中,我们称为异常的响应语句。 trycatch总语法: try /可能发生异
6、常的语句块 catch(异常类名 异常对象实例) /异常处理的语句 catch .,无论如何都执行的部分(finally),有些情况中我们希望一些语句无论是否发生异常都得到执行,那么我们可以将这些语句放入到catch之后的finally结构块中。 语法: try catch() finally /无论是否发生异常都需要执行的语句 ,trycatch执行过程,trycatch的执行流程:首先Java会试图运行try中的所有语句,如果没有发生任何异常,那么catch的部分将不会得到执行;如果发生了一个异常,则try中发生异常之后的部分将会被忽略(跳过),转而执行catch的部分。 在catch中,
7、Java会尝试将发生的异常匹配到一个合适的catch中,然后执行该catch语句结构块中的语句,最后执行finally结构块中的语句。,练习一,定义两个异常类:IDNumberException 和 PasswordException 这2个类分别有1个字符串成员变量description,指明异常的描述。 实现两个异常类的构造方法,构造方法接受一个字符串参数description,并将成员变量初始化为参数的值。 分别为两个异常类实现toString方法,toString方法返回的就是该异常的描述。,练习二,从老师处获得User.java文件,阅读并理解User类的程序。 修改User类的构造
8、方法,当idNumber不是15个字符或18个字符时,抛出IDNumberException异常,异常的描述是“身份证号码长度错误”;当password长度不足6个字符时,抛出PasswordException异常,异常的描述是“密码长度不足六位”。 提示:使用String类的length方法可以获得字符串的长度,该方法无参数。该方法返回一个整数,表示字符串的字符个数,练习三,修改User.java文件,在User类中加入程序入口方法main,在main方法中实例化三个User类的对象u1、u2和u3。 u1初始化为用户名:张三、密码:123456、身份证号:12345678 u2初始化为用户名:李四、密码:abc、身份证号u1初始化为用户名:王五、密码:asdf、身份证号:888,练习三,使用try结构块监控以上的三个对象的实例化语句。然后使用catch捕获PasswordException异常,并将该异常打印至屏幕上;再使用catch捕获IDNumber
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冬季绿化养护与管理
- 宣传写作课件学习
- 宠物日常护理课件图片
- 二零二五年度新能源电池采购合同协议
- 2025版茶叶品牌重塑与市场拓展合同
- 二零二五年度个人消费贷款借款合同
- 二零二五年度测绘仪器采购与测绘项目验收服务合同
- 2025版跨国公司财务全球税务筹划合同
- 2025版高端医疗器械采购合同作废及供应商变更协议
- 二零二五年度阿拉尔经济技术开发区土地经营权流转合同
- 预算编制的目标与指标
- 2025年铁路车辆钳工(高级技师)理论考试题库(含答案)
- 采购螺丝合同协议
- 采购询价制度
- 2025年上海高考英语复习必背考纲词汇手册默写
- 2025安全生产法律法规专题知识培训
- 初中英语跨学科教学的教学方法策略
- GB/T 1634.1-2025塑料负荷变形温度的测定第1部分:通用试验方法
- 肩袖修补术护理
- 政府委托代建合同范本
- DB37-T 1933-2022 氯碱安全生产技术规范
评论
0/150
提交评论