版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JavaJava语言程序设计语言程序设计信息工程学院信息工程学院 信息类专业课程西北农林科技大学西北农林科技大学第八章 异常处置JavaJava语言程序设计语言程序设计信息工程学院信息工程学院导读导读主要内容异常的含义及分类异常处置两种抛出异常的方式自定义异常常见异常难点自定义异常JavaJava语言程序设计语言程序设计信息工程学院信息工程学院1异常的含义所谓异常就是程序运转时能够出现一些错误,比如试图翻开一个根本不存在的文件等2异常处置的必要性传统错误处置的缺乏之处,主要表现为:1程序复杂;2可靠性差;3前往信息有限;4 前往代码规范化困难。Java言语采用错误代码和异常处置相结合的方式可以
2、把错误代码与常规代码分开,也可以在catch中传播错误信息,还可以对错误类型分组。一、异常的含义及分类JavaJava语言程序设计语言程序设计信息工程学院信息工程学院3异常的分类在java言语中,异常是一个对象,它承继于Throwable类,一切的Throwable类的子孙类所产生的对象都是例外异常。从Throwable直接派生出的异常类有 Exception 和 Error,如图6-1所示。一、异常的含义及分类JavaJava语言程序设计语言程序设计信息工程学院信息工程学院图图1 Java1 Java异常层次图异常层次图ThrowableThrowableErrorErrorExceptio
3、nExceptionRuntimeExceptionRuntimeExceptionContingencyExceptionContingencyException一、异常的含义及分类JavaJava语言程序设计语言程序设计信息工程学院信息工程学院Exception Exception 是代表了真正实践意义上的异常对象的根基类。是代表了真正实践意义上的异常对象的根基类。Exception Exception 和从它派生而来的一切异常都是运用程序可以捕获到和从它派生而来的一切异常都是运用程序可以捕获到的,并且可以进展异常错误恢复处置的异常类型。的,并且可以进展异常错误恢复处置的异常类型。Erro
4、r Error 那么表示那么表示 出现了一个非常严重的异常错误,并且这个错误出现了一个非常严重的异常错误,并且这个错误能够是运用程序所不能恢复的,例如能够是运用程序所不能恢复的,例如 LinkageError LinkageError ,或,或 ThreadDeath ThreadDeath 等。由等。由JavaJava虚拟机生成并抛出,虚拟机生成并抛出,JavaJava程序不做处置程序不做处置。java.long.Errorjava.long.Error和和java.lang.RuntimeExceptionjava.lang.RuntimeException的子类免于编的子类免于编译时的检
5、查。译时的检查。RuntimeExceptionRuntimeException异常由系统检测,用户的异常由系统检测,用户的Java Java 程程序可不做处置,系统将它们交给缺省的异常处置程序。序可不做处置,系统将它们交给缺省的异常处置程序。一、异常的含义及分类JavaJava语言程序设计语言程序设计信息工程学院信息工程学院二、异常处置2.1. 异常处置的根本构造2.2. 多个catch 块2.3. finally语句JavaJava语言程序设计语言程序设计信息工程学院信息工程学院2.1 异常处置的根本构造1异常处置的定义异常处置是用户程序以预定的方式呼应运转错误和异常的才干。它的根本方式是
6、:当一个方法引发一个异常后,可将异常抛出,由该方法的直接或者间接调用者处置异常。2异常处置语句异常处置语句有try、catch、finally、throw和throws。在以下部分将逐一引见这些语句的作用。JavaJava语言程序设计语言程序设计信息工程学院信息工程学院3异常处置的根本构造try catch构造是异常处置的根本构造。这种构造中能够引发异常的语句封入在try块中,而处置异常的相应语句封入在catch块中。构造的格式如下:2.1 异常处置的根本构造JavaJava语言程序设计语言程序设计信息工程学院信息工程学院 try try 程序执行体程序执行体 catch( catch(异常类
7、型异常类型1 1 异常对象异常对象1)1) 异常处置程序体异常处置程序体1 1 catch( catch(异常类型异常类型2 2 异常对象异常对象2)2) 异常处置程序体异常处置程序体2 2 catch( catch(异常类型异常类型n n 异常对象异常对象n)n) 异常处置程序体异常处置程序体n n finally finally 异常处置终了前的执行程序体异常处置终了前的执行程序体/不论发生什么异常或者不发生任何异常,都要执行的部分;不论发生什么异常或者不发生任何异常,都要执行的部分; 2.1 异常处置的根本构造JavaJava语言程序设计语言程序设计信息工程学院信息工程学院阐明:1 tr
8、y语句指明能够产生异常的代码段;2 catch语句在try语句之后,用于捕捉异常,一个try语句可以有多 个catch语句与之匹配。当有多个catch语句时,系统按照先后顺 序逐个检查 。用catch语句捕捉异常时,假设找不到相匹配的catch 语句,将执行缺省的异常处置。3将catch程序块的参数不能设置成多个,一个catch只需一个参数.4假设两个catch程序块均和某个try程序块有关都用于捕捉同一类 型异常,那么将产生语法错误。5假设某一类型异常,能够有几个异常处置程序与他相匹配,那么执行 first相匹配的异常处置程序6java中可以运用嵌套的trycatch构造。在运用嵌套的try
9、块时, 将先执行内部try块,假设没有遇到匹配的catch块 那么将检查外部 try块的catch块。2.1 异常处置的根本构造JavaJava语言程序设计语言程序设计信息工程学院信息工程学院throw语句 用于指出当前现有异常,当程序执行到throw语句时,流程就转到相匹配的异常处置语句,所在的方法也不再前往值。throw语句可以将异常对象提交给调用者,以进展再次处置。throws语句指明方法中能够要产生的异常类型,由调用者进展异常处置。2.1 异常处置的根本构造JavaJava语言程序设计语言程序设计信息工程学院信息工程学院2.2 多个catch 块n单个try块能有许多catch块,当t
10、ry块有可以引起不同类型异常的语句时,多个catch块是必需的。JavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例2】npublic class TryCatchnpublic static void main(String args) nint a=0,0;nint num=1,result=0;ntry nresult = num/0;nSystem.out.println(num/a2);nncatch (ArithmeticException e) nSystem.out.println(Errore) ; nncatch (ArrayIndexOutOfBoun
11、dsException e)nSystem.out.println(Errore);nncatch (Exception e) nSystem.out.println(Some other error: );nnn2.2 多个catch 块JavaJava语言程序设计语言程序设计信息工程学院信息工程学院2.3 finally语句nfinally语句可以和try语句一同运用,无论能否出现异常,finally语句指明的代码一定被执行。一个异常处置程序只需一个finally块,但并不强迫必需求有finally块。n有时,必需处置某些语句如文件封锁操作,不论异常能否发生,都必需执行。此时,虽然可以在t
12、ry和catch块放置代码以终了文件,但是为了防止重写代码,可以把代码放在 finally块。n有时候我们希望某些语句在发生异常时也能执行,以释放外部资源或者封锁一个文件,这时可以用finally 语句来实现。JavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例3】nimport java.*;nimport java.io.*;nclass withoutFinallyExamplen public void foo() throws IOExceptionn /在空闲的端口上创建一个套接字n ServerSocket ss = new ServerSocket(0);n
13、 try n Socket socket = ss.accept();n /此处的其他代码.n n catch (IOException e) n ss.close(); /label1n throw e;n n /.n ss.close(); /label2n n2.3 finally语句JavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例3】n问题n上述代码没有finally块,程序中创建了一个套接字,并调用 accept 方法。在退出该方法之前,必需封锁此套接字,以防止资源破绽。为此,在/label2处调用 close来封锁此套接字,此语句为该方法的最后一条语句。正常
14、情况下,/label2处的close会执行,但是,假设 try 块中发生一个异常会时,/label2处的close语句是不会执行的,即在这种情况下,套接字没有封锁,能够产生资源破绽。因此,程序中必需捕获这个异常,并在重新发出这个异常之前在 / label 1 处插入对 close 的另一个调用。这样就可以确保在退出该方法之前封锁套接字。n但上述编写代码方式既费事又易于出错,但在没有 finally 的情况下这是必不可少的。以下借助finally块来处理这个问题。2.3 finally语句JavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例4】nimport java.*;n
15、import java.io.*;nclass WithFinallynn public void foo2() throws IOExceptionn n /在空闲的端口上创建一个套接字n ServerSocket ss = new ServerSocket(0);n try n Socket socket = ss.accept();n /此处的其他代码.n n finally n ss.close();n n n2.3 finally语句JavaJava语言程序设计语言程序设计信息工程学院信息工程学院三、两种抛出异常的方式3.1 throw 直接抛出3.2 throws间接抛出异常声明异
16、常JavaJava语言程序设计语言程序设计信息工程学院信息工程学院3.1 throw 直接抛出n直接抛出异常n是在方法中用关键字throw引发明确的异常。当throw被执行时,其后语句将不再被执行,执行流程将直接寻觅catch语句并进展匹配 throw e。显然,这种异常不是出错产生,而是人为地抛出。nthrow抛出异常的格式为:nthrow ThrowableObject;n例如:nthrow new ArithmeticException();JavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例5】nclass JavaThrow 1npublic static voi
17、d main(String args) nSystem.out.print(“Now );ntry nSystem.out.print(“is );n throw new NullPointerException() ; /直接抛出一个异常 ; n/System.out.print(“This will not execute!); /此句不被执行n ncatch (NullPointerException m)nSystem.out.print(“the ); nnSystem.out.print(“time. n); nn3.1 throw 直接抛出JavaJava语言程序设计语言程序设计
18、信息工程学院信息工程学院n运转结果为:nNow is the time.n阐明:n在本实例中,“throw new NullPointerException() ;用于人为抛出异常NullPointerException,catch (NullPointerException m)块对这类异常进展处置。n留意:n语句System.out.print(“This will not execute!);必需注释起来,否那么编译时会出现如下错误。3.1 throw 直接抛出JavaJava语言程序设计语言程序设计信息工程学院信息工程学院JavaJava语言程序设计语言程序设计信息工程学院信息工程学院
19、3.2 throws间接抛出异常n阐明:n假设一个方法能够导致一个异常但不处置它,此时要求在方法声明中包含throws子句通知潜在调用者,在发生异常时沿着调用层次向上传送,由调用它的方法来处置这些异常。这类异常成为声明异常。n根本格式为:n类型 方法名参量表 throws 异常列表n n 代码 nJavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例10】nclass ThrowsExceptionExample1 nprivate static void p() throws ArithmeticException n/间接抛出异常,本人并未处置,让方法的直接调用者来处置n
20、int i; ni=4/0; /此句能够引发异常,可是本人并未处置n npublic static void main(String args) ntrynp(); /方法的直接调用者俘获处置异常n ncatch(ArithmeticException e) nSystem.out.println(“Error: Divider is zero! n);n nn3.2 throws间接抛出异常JavaJava语言程序设计语言程序设计信息工程学院信息工程学院n【实例6-10】n运转结果为:nError: Divider is zero!n阐明:n在本实例中,语句i=4/0;将产生异常,产生异常后
21、方法p()并不作处置,而是由调用p()的方法main做处置。3.2 throws间接抛出异常JavaJava语言程序设计语言程序设计信息工程学院信息工程学院6.4 自定义异常n经过承继Exception类或它的子类,实现自定义异常类。n对于自定义异常,必需采用throw语句抛出异常,这种类型的异常不会自行产生。n可以经过扩展Exception类来创建异常类。n用户定义的异常同样要用trycatch捕获,但必需由用户抛出 throw new MyException。JavaJava语言程序设计语言程序设计信息工程学院信息工程学院6.4 自定义异常n【实例11】n/ myException.jav
22、anclass myException extends Exception n class UserTrial nint num1,num2;n public UserTrial(int a,int b)n num1=a; num2=b; nvoid show() throws myException nif (num10) n throw new myException();nSystem.out.println(Value1=+ num1);nSystem.out.println(Value2 =+num2);nnn【实例11】nclass myExceptionThrown public
23、 static void main(String args) n UserTrial trial =new UserTrial(-1,1);n tryn trial.show();n catch (myException e) System.out.println(Illegal Values: Caught in main);n nnJavaJava语言程序设计语言程序设计信息工程学院信息工程学院【实例11】代码阐明:1在上述给出的代码里,称myException类从Exception类扩展而来。2UserTrial类有一个能引发称为myException的自定义异常的方法。3在 myExceptionThrow类里的 main()方法创建 UserTri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026干部职工季节交替谨防感冒专题培训课件
- 2026新学期慢性病患者季节交替谨防感冒专题培训课件
- 2025-2026年四川省人教版初中物理第3课电磁学练习题
- 2025-2026年陕西省人教版小学音乐第12单元音乐欣赏同步练习题
- 2025-2026年服务营销策略冲刺练习
- 2025-2026年江苏省苏教版高中体育健康知识测试卷
- 2026新学期基层医务人员基层医疗机构传染病防控专题培训课件
- 2026新学期高二年级德育工作计划课件:主题教育月活动
- 初中英语七年级下册一般现在时与一般过去时对比教学设计
- 高三语文议论文写作梯度升格教学设计
- 加油站防雷制度档案
- 光隔离器与光耦合器考核试卷
- 《食品原料学》课件-第一章 食品原料学研究与发展
- 电影赏析绿皮书课件(内容详细)
- GB/T 21617-2023危险品固体氧化性试验方法
- 浙教版小学人·自然·社会四年级第25课 南宋都城 课件
- GB/T 8464-2023铁制、铜制和不锈钢制螺纹连接阀门
- 企业数字化转型附有答案
- 校园文明教育-主题班会课件
- 2021年江苏省普通高中学业水平合格性考试物理(样卷及答案)
- 再生资源循环回收利用及新型模式探讨概述课件
评论
0/150
提交评论