版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计第6章异常处理本章位置握异常的定义及其类型1掌握异常的处理机制2能力点掌握对异常的处理3第6章异常处理Java语言程序设计主要内容1异常和异常类2异常处理3案例分析4任务训练Java语言程序设计第6章异常处理6.1异常和异常类
在编写程序的时候,不论是简单程序,还是具备一定功能的复杂程序,在编写调试过程中,经常会对有问题的代码进行调试,在语法无误的情况下有时也会出现程序得不到预期的效果,对此类问题,在Java语言中,通过异常来进行处理。在Java语言中,程序运行出现的错误称为“异常”或“例外”,Java语言用面向对象的方法通过异常处理机制来处理错误。Java语言程序设计第6章异常处理
6.1.1异常的定义
在学习Java的异常概念之前,先看看下面的实例。
【例6-1】Java系统对“除数为0”异常的处理。
packagechapter06;
publicclassMathDemo{
publicstaticvoidmain(String[]args){
inta=0;
intb=30/a;//除数为0
System.out.println("b的值为:"+b);
}
}第6章异常处理6.1异常和异常类Java语言程序设计
在Java控制台上出现了图6-1所示界面,Java语言中规定除数不能为0,违反这一规则后,程序就会非正常的中止(产生异常)。
如上,异常(Exception)就是在程序运行过程中所产生的意外事件,它中断指令的正常执行。异常的表现有多种形式:算术运算错误(被0除或数溢出)、数组下标越界、I/O错误、内存用完、找不到文件、网络连接错误等。第6章异常处理6.1异常和异常类Java语言程序设计
6.1.2Java异常类及其层次结构
Java语言中,异常类是所有的“异常”的集合,Java中的异常对象是以类的层次结构进行组织的,异常就是这些异常类的实例。在异常类层次的最上层是Throwable(可抛出),用于表示所有的“异常”情况,是所有的异常的一个共同的祖先。每个异常类都是Throwable类的子类。Throwable类有两个直接子类:Exception类和Error类,其中Exception类是用户程序能够捕捉到的异常情况,通过产生它的子类来创建异常;Error类描述的是系统内部错误,一旦错误产生,是程序无法处理的错误,表示运行的应用程序中有较严重问题。第6章异常处理6.1异常和异常类Java语言程序设计
除了Java类库所定义的异常类之外,用户也可以通过继承已有的异常类来定义自己的异常类,并在程序中使用(利用throw产生,catch捕获)。
由图6-2可知,Java中的异常和错误的区别在于异常能被程序本身可以处理,错误是无法处理的。Exception异常分两大类:运行时异常和非运行时异常(编译异常)。程序中应当尽可能去处理这些异常。第6章异常处理6.1异常和异常类Java语言程序设计
运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常(编译异常):是RuntimeException以外的异常,但都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。表6-1、6-2和6-3分别描述了RuntimeException子类、IOException异常和其它常见异常产生的主要原因。
第6章异常处理6.1异常和异常类Java语言程序设计CompanyLogo第6章异常处理6.1异常和异常类Java语言程序设计CompanyLogo第6章异常处理Java语言程序设计6.1异常和异常类在程序执行代码时,发生了异常,程序会按照预定的处理方法对异常进行处理,异常处理完毕后,程序继续进行。
6.2.1异常处理机制
Java的异常处理机制为程序提供了异常处理的能力。所谓异常处理就是在程序中预先想好对异常的处理办法,当程序运行出现异常时,对异常进行处理,处理完毕后,程序继续执行。
在Java应用程序中,异常处理机制为:抛出异常和捕获异常。异常被看作对象,必须是Throwable类及其子类所产生的实例对象。当Java创建异常对象后,会发送给Java程序,这个动作称为抛出(throw)异常,程序捕捉到这个异常后,可以为该异常编写异常处理代码。
当运行得到异常对象时,系统将会寻找处理异常的方法,把当前异常对象交给该方法处理,这一过程称为捕获(catch)异常。如果没有主动可以捕获异常的方法,则系统将终止,程序退出运行状态。第6章异常处理6.2异常处理Java语言程序设计
6.2.2捕获异常
在Java中,异常通过try/catch/finally语句捕获。其一般语法形式为:
try{
//可能会发生异常的程序代码
}catch(Type1id1){
//捕获并处理try抛出的第1个异常类型
}catch(Type2id2){
//捕获并处理try抛出的第2个异常类型
}
//多个异常捕获并处理的异常
//捕获并处理try抛出的第n个异常类型
finally{
//无论是否发生异常,都将执行的语句块
}第6章异常处理6.2异常处理Java语言程序设计
try块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
catch块:用于处理try捕获到的异常。一个try块可能有多个catch块。若如此,则执行第一个匹配块。即Java虚拟机会把实际抛出的异常对象依次和各个catch代码块声明的异常类型匹配,如果异常对象为某个异常类型或其子类的实例,就执行这个catch代码块,不会再执行其它的catch代码块。
finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。
try、catch、finally语句块的执行顺序:
(1)当try没有捕获到异常时:try语句块中的语句逐一被执行,程序将跳过catch语句块,执行finally语句块和其后的语句;
(2)当try捕获到异常,catch语句块里没有处理此异常的情况:当try语句块里的某条语句出现异常时,而没有处理此异常的catch语句块时,此异常将会抛给JVM处理,finally语句块里的语句还是会被执行,但finally语句块后的语句不会被执行;
(3)当try捕获到异常,catch语句块里有处理此异常的情况:在try语句块中是按照顺序来执行的,当执行到某一条语句出现异常时,程序将跳到catch语句块,并与catch语句块逐一匹配,找到与之对应的处理程序,其它的catch语句块将不会被执行,而try语句块中,出现异常之后的语句也不会被执行,catch语句块执行完后,执行finally语句块里的语句,最后执行finally语句块后的语句;第6章异常处理6.2异常处理Java语言程序设计
提醒:
(1)必须在try之后添加catch或finally块。try块后可同时接catch和finally块,但至少有一个块。
(2)必须遵循块顺序:若代码同时使用catch和finally块,则必须将catch块放在try块之后。
(3)可嵌套try-catch-finally结构。第6章异常处理6.2异常处理Java语言程序设计【例6-2】捕捉throw语句抛出的“除数为0”异常。Java语言程序设计第6章异常处理6.2异常处理
例6-2在try语句块中通过if语句进行判断,当“除数为0”的错误条件成立时引发ArithmeticException异常,创建ArithmeticException异常对象,并由throw语句将异常抛给Java运行时系统,由系统寻找匹配的异常处理器catch并运行相应异常处理代码,打印输出“程序出现异常,变量b不能为0。”try-catch语句结束,继续程序流程。
事实上,“除数为0”等ArithmeticException,是RuntimException的子类。而运行时异常将由运行时系统自动抛出,不需要使用throw语句。例6-2try语句块中,若将if语句去掉,程序运行时,会出现“除数为0”错误,引发ArithmeticException异常。运行时系统创建异常对象转而匹配合适的异常处理器catch,并执行相应的异常处理代码。
如例6-1所示,如果不捕捉、也不声明抛出运行时异常会自动出现错误提示:
Exceptioninthread"main"java.lang.ArithmeticException:/byzero
atchapter06.MathDemo.main(MathDemo.java:5)第6章异常处理6.2异常处理Java语言程序设计
2.多重catch捕获异常
对于有多个catch子句的异常程序而言,应该尽量将捕获底层异常类的catch子句放在前面,同时尽量将捕获相对高层的异常类的catch子句放在后面。否则,捕获底层异常类的catch子句将可能会被屏蔽。例如:RuntimeException异常类包括运行时各种常见的异常,ArithmeticException类和ArrayIndexOutOfBoundsException类都是它的子类。因此,RuntimeException异常类的catch子句应该放在最后面,否则可能会屏蔽其后的特定异常处理或引起编译错误。第6章异常处理6.2异常处理Java语言程序设计【例6-3】多重catch举例。Java语言程序设计第6章异常处理6.2异常处理在Java语言中,try语句是可以嵌套的,一个try语句的代码块中可以包含另外一个try语句。每当产生一个异常,将会先检查直接包抛出该异常的代码的try语句块,如果该语句块没有对该异常进行处理,异常将会被送到上一级的try语句中进行处理,直到该异常被处理为止。第6章异常处理6.2异常处理Java语言程序设计【例6-4】try语句的嵌套使用。Java语言程序设计第6章异常处理6.2异常处理3.try/catch/finally语句
finally语句块用来进行善后处理工作,完成一些资源释放,清理工作等。例如关闭try程序块中所打开的文件、断开网络连接等。第6章异常处理6.2异常处理Java语言程序设计【例6-5】带finally子句的异常处理程序。Java语言程序设计第6章异常处理6.2异常处理6.2.3声明异常
声明异常是指一个方法不处理它产生的异常,而是向上传递,谁调用这个方法,这个异常就由谁处理。换句话说,异常的声明的作用是告知方法的调用者,此方法有未处理的异常发生,需要进行异常处理,这样,调用者就会做出相应的处理。声明异常的格式为:
[修饰符]<返回类型>方法名([参数列表])throws异常列表
异常列表意指可以有多个异常出现,声明异常后,同样需要捕获和处理异常。第6章异常处理6.2异常处理Java语言程序设计【例6-6】声明异常举例。Java语言程序设计第6章异常处理6.2异常处理
6.2.4抛出异常
在捕获异常前,必须有代码产生异常对象,并把它抛出。抛出异常的代码一般是Java运行时系统自动完成的,但是如果程序员需要主动抛出异常,可以通过throw语句实现这样的效果。throw语句格式为:
throw异常对象第6章异常处理6.2异常处理Java语言程序设计【例6-7】主动抛出异常。Java语言程序设计第6章异常处理6.2异常处理
6.2.5自定义异常类
除了系统提供的异常类外,开发系统时,程序员往往需要自定义异常。自定义异常必须继承Throwable类或者它的子类,通常是继承Exception类。
在程序中使用自定义异常类,大体可分为以下几个步骤:
(1)创建自定义异常类。
(2)在方法中通过throw关键字抛出异常对象。
(3)如果在当前抛出异常的方法中处理异常,可以使用try/catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4)在出现异常方法的调用者中捕获并处理异常。第6章异常处理6.2异常处理Java语言程序设计【例6-8】自定义异常。Java语言程序设计第6章异常处理6.2异常处理在Java应用程序中,输入姓名、性别及身份证号,并对身份证长度不等于18时,产生异常。第6章异常处理Java语言程序设计6.3案例分析6.3.1案例情景——身份验证程序6.3案例分析第6章异常处理Java语言程序设计6.3.2程序运行效果1.案例分析(1)定义Person类,有姓名(name)、性别(sex)、身份证号(id)三个属性,同时定义三个方法setName()、setSex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 成本管控责任制度
- 手术器械准备责任制度
- 投诉举报岗位责任制度
- 护理员岗位责任制度
- 招商局首问责任制度
- 探放水岗位责任制度
- 搅拌站安全责任制度范本
- 收费停车场安全责任制度
- 政府办首问责任制制度
- 教学管理岗位责任制度
- GB/T 14598.301-2010微机型发电机变压器故障录波装置技术要求
- GB 30526-2019烧结墙体材料和泡沫玻璃单位产品能源消耗限额
- GA 139-2009灭火器箱
- 2023年江苏专转本计算机真题及答案
- 部编版小学道德与法治五年级下册第1课《读懂彼此的心》课件
- 医疗机构消防安全管理九项规定(2020版)-精品原创课件
- 听力检查及结果分析
- DBJ 53-T-46-2012 云南省城镇道路及夜景照明工程施工验收规程
- 工业厂房水电安装工程施工方案
- 商务英语翻译实务完整版教学ppt课件全套教程
- 食品质量与安全管理教材PPT课件(105页)
评论
0/150
提交评论