版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
J
程序设计任务6:系统异常处理1任务描述目录2技术准备3任务实施1、任务描述学生信息管理系统中学生各门课的成绩采用百分制,合理的数据为0-100。用户在从键盘上输入学生成绩时,可能会输入一些错误数据,如数据不在合理范围内或是数据类型不符合要求。本任务主要完成当用户输入的成绩数据不合法或数据类型不匹配时等异常的处理,使程序不仅能够处理正确输入,对一些非法输入也能够正常处理,从而提高系统的健壮性。完成本任务需要了解和掌握Java中异常处理机制和异常的处理。2.1异常简介技术准备2.2异常的类型2.3异常处理机制2.4异常处理方法2.5自定义异常2.1异常简介异常是指在程序运行的过程中发生的非正常状况,例如程序运行时要访问的文件不存在、接收的数据类型不匹配等。针对程序中的非正常情况,Java语言中引入了异常,以异常类的形式对这些非正常情况进行封装,并通过异常处理机制对程序运行时发生的各种问题进行处理。2.1异常简介【例6‑1】被0除异常2.1异常简介ArithmeticException异常只是Java异常类中的一种,在Java中针对不同异常情况提供了大量的异常类,这些类都继承自java.lang.Throwable类。Throwable类的继承体系如下所示。Error称为错误,表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的,例如系统崩溃,磁盘读写错误等。Exception称为异常类,它表示程序本身可以处理的错误。在Java程序开发中进行的异常处理,都是针对Exception类及其子类的。2.1异常简介Throwable类提供了一些方法用于获取异常信息。方法声明功能描述StringgetMessage()返回此throwable的详细消息字符串voidprintStackTrace()将此throwable及其追踪输出至标准错误流voidprintStackTrace(PrintStreams)将此throwable及其追踪输出到指定的输出流2.2异常类型异常类Exception分为两种类型:编译时异常和运行时异常。编译时异常是指在程序编译时期产生的异常,而这些异常必须要进行处理,也称为checked异常。运行时异常即使不编写异常处理代码,依然可以通过编译,也称为unchecked异常。2.2异常类型1.编译时异常在Exception的子类中,除了RuntimeException类及其子类外,其他子类都是编译时异常。编译时异常的特点是在程序编写过程中,Java编译器就会对编写的代码进行检查,如果出现比较明显的异常就必须对异常进行处理,否则程序无法通过编译。处理编译时异常的方式通常有两种:一是使用try...catch语句对异常进行捕获处理;二是使用throws关键字声明抛出异常,让调用者处理。2.2异常类型2.运行时异常RuntimeException类及其子类都是运行时异常。运行时异常是在程序运行时由Java虚拟机自动进行捕获处理的,即使没有使用try..catch语句捕获或使用throws关键字声明抛出,程序也能编译通过,只是在运行过程中可能报错。2.2异常类型Java中常见的运行时异常如下表所示。异常类名称异常类说明ArithmeticException算术异常IndexOutOfBoundsException
下标越界异常ClassCastException类转换异常NullPointerException空指针异常NumberFormatException数字格式化异常2.3异常处理机制Java的异常处理机制由抛出异常和捕获异常两部分组成。程序运行过程中,如果出现了异常,就会生成一个异常对象,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。生成的异常对象将传递给Java运行时系统,这一异常的产生和提交过程称为抛出异常。当Java运行时系统得到一个异常对象时,它将会寻找处理这一异常的方法。如果能找到处理这种异常的方法,就把当前异常对象交给此方法进行处理,这一过程称为捕获异常。如果找不到处理这种异常的方法,则运行时系统终止,相应的程序也终止。2.4异常处理方法当程序发生异常时,为了保证程序能够有效的执行,需要对异常进行处理。Java对异常处理有两种方式。一是通过try...catch结构处理异常;二是将异常抛给上一层调用它的方法中,由上一层方法进行异常处理或继续向上抛出异常。2.4异常处理方法1.try...catch异常处理结构利用try...catch结构处理异常,把可能会发生异常的代码放在try子句中,把程序发生异常时要对异常进行的处理放在catch子句中,无论是否发生异常都需要执行的语句块放在finally子句中。2.4异常处理方法try…catch结构的完整形式如下所示。try{
可能发生异常的语句;}catch(异常类型1异常对象名1){
异常处理代码块1;}catch(异常类型2异常对象名2){
异常处理代码块2;}...catch(异常类型n异常对象名n){
异常处理代码块n;}finally{
无论是否发生异常都要执行的语句;}说明:(1)在整个结构中,try子句只能出现一次,catch子句可根据需要出现1次或多次,finally子句只能出现0次或1次。(2)try子句中包含的是可能发生异常的语句。当try子句中代码发生异常时,会抛出一个异常对象。该异常对象由相应的catch子句捕获并处理。catch子句可以有多个,每一个catch语句捕获一个不同类型的异常,系统根据catch中的异常类型决定执行哪个catch中的语句块。(3)finally子句中的代码无论是否发生异常都会执行。通常用于做一些清理工作,如文件关闭等。finally子句不是必须的,可以省略。2.4异常处理方法【例6‑2】try...catch使用示例。2.4异常处理方法当接收用户键盘输入时,要求用户输入的是整数,如果用户输入的不是整数,也会引发相应的异常,如下图所示。2.4异常处理方法在程序中可以通过多catch子句来捕获发生的不同类型异常。2.4异常处理方法【例6‑4】try...catch...finally使用示例。2.4异常处理方法2.抛出异常有些时候,可能并不明确或并不急于处理异常,这时可采用异常处理的另外一种方式,即抛出异常。将出现的异常向它的上一层方法抛出,由上一层方法在使用时再进行异常处理或继续往上抛出。抛出异常使用throws关键字来实现,跟在要抛出异常的方法名称后面,一次可抛出一种类型的异常,也可一次抛出多种类型的异常。其语法格式如下所示。[修饰符]返回值类型方法名([形参表])throws异常类1,异常类2,...{
方法体语句;}2.4异常处理方法当在一个方法中使用了throws抛出异常后,在调用该方法的方法中就需要对异常进行处理:要么使用try...catch进行异常捕获处理,要么继续往上抛出。如果不进行处理,会发生编译错误,提示有未处理的异常,如下图所示。2.4异常处理方法【例6‑5】throws使用示例。2.4异常处理方法当在调用有抛出异常的方法时,除了可以在调用方法中直接使用try...catch进行异常处理外,也可以继续使用throws往外抛出,这样程序也能编译通过。但需要注意的是,程序发生了异常,终究是要处理的,如果最终都没有处理,程序还是会发生异常,导致程序终止。2.4异常处理方法【例6‑6】未处理的throws异常示例。2.4异常处理方法3.throw关键字除了可以通过throws抛出异常外,还可以使用throw抛出异常。两者的区别在于,throws用在方法声明中,指明方法可能抛出的多个异常;而throw用在方法体内,其抛出的是一个异常类对象。通过throw关键字抛出异常后,还需要使用throws或try...catch来对抛出的异常进行处理。即前面所讲的例子中发生的异常都是由系统自动产生的,如果想在方法中手动抛出异常对象,则可以通过throw来实现。2.4异常处理方法使用throw抛出异常的语法格式:[修饰符]返回值类型方法名([形参表])throws异常类1,异常类2,...{ thrownew异常类();}2.4异常处理方法【例6‑7】throw使用示例2.5自定义异常尽管Java中定义了大量的异常类,通过这些异常类可以解决编程中出现的大部分异常情况,但系统不可能把实际编程中所有的异常情况都考虑到,可能会出现异常中不存在的一些异常情况,这时就可以自定义异常。要自定义异常,首先需要定义一个自定义异常类,该类须继承自Exception类或其子类,接下来在方法中使用throw抛出自定义的异常类对象,然后对抛出的异常进行处理(使用try...catch或使用throws继续往上抛出)。在实际开发中,如果没有特殊的要求,自定义的异常类只需继承Exception类,在构造方法中使用super调用父类Exception的无参和有参构造方法即可。2.5自定义异常【例6‑8】自定义异常类使用示例2.5自定义异常3.1成绩异常处理任务实施3.2系统测试3.1成绩异常处理学生信息管理系统中学生的各科成绩都采用百分制,且都为整数。本任务需要在学生基本信息管理子模块中添加相应的成绩异常处理,保证用户输入的各科成绩为0-100。在任务5中实现的StudentView类中添加一个enterScore()方法,此方法接收用户从键盘输入的一个数据,如果数据是整数且为0-100,则返回用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年内容电商 知识付费变现项目公司成立分析报告
- 2026年小腿按摩仪项目可行性研究报告
- 2026年交易多边化项目公司成立分析报告
- 2026年生物制造细胞工厂项目公司成立分析报告
- 2026年智能超声波香氛机项目可行性研究报告
- 2026年健康疗愈综合体项目公司成立分析报告
- 2026年工业数字孪生项目可行性研究报告
- 2026年天然气掺氢项目可行性研究报告
- 2026年金融分析师投资策略分析模拟考试题目
- 2026年世界地理信息试题与答案集
- 2026贵州贵阳市安航机械制造有限公司招聘8人考试重点试题及答案解析
- 2026年空天科技卫星互联网应用报告及未来五至十年全球通信创新报告
- (正式版)DB51∕T 3342-2025 《炉灶用合成液体燃料经营管理规范》
- 2025年上海市普通高中学业水平等级性考试地理试卷(含答案)
- 腔镜器械的清洗与管理
- 江南大学《食品科学与工程》考研真题及答案解析
- 眼科:青光眼患者药物治疗指南
- 2025年计算机等级考试(NCRE)一级人工智能与大模型基础样题及参考答案
- 2025年汉语桥的考试题目及答案
- 医护服务意识培训
- 芬兰烟熏桑拿体验创新创业项目商业计划书
评论
0/150
提交评论