


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习必备欢迎下载知识点:1、什么是异常。异常是程序正常执行过程中出现的不正常的情况。例如:人在成长过程中,是个正常的执行过程,但成长过程中会经常生病,这就是异常。为了避免这种不正 常的情况,我们会采取一系列措施,比如:从小锻炼身体,吃新鲜干净的食物,营养合 理的搭配,以增强我们的体质。提高抗病能力。程序我们为了提高它运行时的健壮性, 我们也得采用一些措施。那么怎么提高程序的健壮性呢?JAVA程序中我通过异常的捕获来增加程序的健壮性。2、异常捕获的顺序是怎样的呢?当一个异常发生或抛出。那么正常的程序执行序列将被终止,程序将对异常进行处理,我们称之为抛出异常被捕获。JAVA中通过使用try-cat
2、ch语句把可能抛出异常的语句包起来。例如:前面讲到资源文件类Properties类在进行文件加载时,使用以下语句捕捉异常。tryProperties pro=new Properties。;Pro.lo ad( new File In putStream( C:/perties ”); catch(IOException e)System.out.println(e);3、异常的类型是怎样的呢?Thn)uahleErrurFstepliun/AEserfionKrrorRunlimeExccplionlObxccplion2TA ft dhmt ichxceplkm1 legal
3、 Argu ment ExceptionNullPninterFxceptionANuiiibcrFt ui i tall Lxccpli i.m所有异常类的超类是Throwable。在Throwable下有两个子类,一个是Error,另一个是Exception。Error是错误,程序员无法控制,Exception是异常,程序员可以通过异常捕获加以控制。例如:电脑运行中中毒了,我们可以通过杀毒软件来处理,处理完了以后可以继续使用,这叫异常,我们可以控制。但电脑出现了蓝屏或死机的时候,我们就不能进行任何操 作了。这就是错误,我们无法控制。4、程序中异常是怎么发生的呢?StringinputStr
4、 = JOptionPane.showlnputDialog(null,请输入年龄”);int age = In teger.parse In t(i nputStr);以上代码要求用户输入年龄,年龄是个数字。但通过showInputDialog得到的是个字符串。所以我们需要Integer.parselnt(inputStr),将字符串转成数字。这个时候,如果用户输入的不 是一个数字型的字符串,而是一个非数字的字符串(如字母、符号),在进行 Integer.parselnt(inputStr)转化是就会发生一个异常。如果我们不对它作任何处理,程序就有 可能因此终止掉。5、怎样捕获一个异常呢。a
5、、把正常运行的代码放在 try块里。b、 如果程序中出现了异常就把异常抛出在catch中,如果catch中能捕获抛出的异常。 那么就会进行处理。处理的代码写在 catch块中。try程序块里面的语句是按顺序执行的语句当try程序块里面的语句抛出一个异常的时候,程序的控制转向了相匹配的catch程序块,catch程序块里面的语句被执行。当异常发生后,程序执行将忽略try程序块中剩余的语句,继续执行程序块后面的语句。如果在try程序块中没有抛出异常,那么 catch块将被忽略。程序将继续执行try-catchstmt ii>: catch (Exception e) _ * cc-s tmt
6、-n*厂stmt><newt stmt>例如:trySystem.out.pri ntl n(开始”1int x=4/0;/2System.out.pri ntl n(执行”3catch(Excepti on e)System.out.pri ntl n(发生异常”4System.out.pri ntl n(这是发生异常的情况,在异常处理外部”);try块里顺序执行,先打出“开始”,没有异常继续执行,当执行到第2行时,因为0不能做除数,所以会发生一个算术异常。这个时候就会跳过try块里剩下的语句转去执行catch块中的内容。所以第3行就不能执行。跳到catch块中执行第4句,
7、打出“发生异常”。执行完以后接着往下顺序执行。打出第 5行“异常处理外部”。trySystem.out.println(开始 ”);1int x=4/2;/2System.out.println(执行 ”);3catch(Exceptio n e)System.out.println(发生异常 ”);4System.out.println(异常处理外部”);这是正常情况,在try块里顺序执行,先打出“开始”,没有异常继续执行,当执行到第2行时,得到x的值为2,不会有异常。这个时候继续执行到第3行,打出“执行”。因为在try块中没有任何异常,执行完以后接着往下顺序执行。打出第5行“异常处理外部”
8、。在Throwable类中有两个方法,可以用于获取抛出异常的信息getMessageprin tStackTrace6、抛出异常在一个try-catch语句中,当有多个catch块的时候,它们被顺序检查在检查过程中,注意异常的匹配关系是很重要的当一个异常被抛出, 与它相匹配的catch块被执行,其它的catch块,就被忽略掉不再执 行*,<cecsp-pjock-u>t>« A *<ccgjj-pjqck-3 * :<c«ircp-pjoc|c-s> <G«CCp-pjOC|CT >y< 匚一er - <
9、 >j >J-j>J 2 * J 匚 Gp-gTQCF-孑 > ”* <CCCp-pjOC|<-S>:« 'i -bemr-3><C -B£UF(: - J > 厂z <奩鼎 gwmg 解带一t甘扁 如果没有catch块匹配抛出的异常,那么系统会在堆栈中搜索,找到一个匹配的捕获方 法。如果仍然没有找到,那么系统将处理抛出异常什么叫异常和 catch块相匹配:1抛出的异常和捕捉的异常是同一个类2、抛出的异常是捕捉异常的子类3、 多个catch块中如果捕捉的异常之间有继承关系那么不要把父类放在子类之 前(
10、这种做法也不被允许)4、尽量不要偷懒使用具体异常类而不要使用Exception例如:try int a= new int 4;System. out .println(a6);/1int i=3/0;/2catch (java.lang.ArithmeticException e)/捕获第 2行异常System. out .println("算术错误");catch (java.langArraylndexOutOfBoundsException e) /捕获第 1 行异常System. out .println( ”数组下标越界”);不同的异常由不同的 catch块进行捕
11、获。发生异常时由相应的catch块进行处理。Catch块中怎么捕获异常?tryint i=3/0;catch(java.la ng.ArithmeticException e)/ 抛出异常和捕获异常是同一个类 System.out.println("算术错误"); tryint i=3/0;catch(java.lang.Exception e)/抛出异常是捕获异常的子类 System.out.println("算术错误");try int a= new int 4;System. out .println6);catch (java.lang. Exc
12、eption e)System. out .println(” 发生异常”);catch (java.Iang.ArrayIndexOutOfBoundsException e) System. out .println(”数组下标越界”);这种方式不被允许,因为catch块前一个异常Exception 是后一个异常 ArrayIndexOutOfBoundsException 的父类。所以有异常前一个异常 catch块都捕 获了。后一个catch块永远不会被执行。编译会出错。try int a= new int 4; System. out .println(a6);catch (java.
13、Iang.ArrayIndexOutOfBoundsException e) System. out .println(”数组下标越界”);catch (javaang.Exception e) System. out .println( "发生异常");这种方式允许。如果有数组下标越界异常由第一个catch块处理。如果有其它异常由第二个catch块处理。7、如果有一块代码不管是否发生异常抛出都要被执行,我们使用关键字fin ally这样的机制有助于我们进行系统资源的回收。比如:在数据库操作时,如果发生了异常,那么数 据库连接就可能不会关闭,而一直长驻内存。在进行 IO文件
14、读取和写入时,如果发生 了异常就可能流不会关闭。所以使用fin ally可以解决这样的问题。Trycatch()fin ally这样的结构可以用警察抓小偷来说明,警察抓小偷,如果小偷守法(没有异常)则警察就不会抓他,如果小偷违法(发生异常),则警察就抓它往监狱里放(catch代码块)。不管抓没有抓到,警察工资照拿。(finally内容)public void change()try int x=9/3;System.out.println(正常执行”); catch (Exception e)System. out .println(” 发生异常”);fin ally System. out
15、.println("finally 内容");因为正常执行,所以 catch里内容不会执行。执行结果是“正常执行”和“fin ally内容”public void change()try int x=9/0;System.out.println(正常执行”); catch (Exception e)System. out .println("发生异常");fin ally System. out .println("finally 内容");因为发生异常,所以catch里内容执行。执行结果是“发生异常”和“fin ally内容”8、关
16、于finally的问题大家都知道return是跳出方法的语句, 如果在try里有return语句那么fin ally里的 内容会不会执行呢?答案是会的。会在return语句之前执行,执行完fin ally语句之后,return语句再执行。public void change()try int x=9/0;/1 return; catch (Exception e)"发生异常");"finally 内容");"异常外部内容");System. out .println( fin ally System. out .println( Sy
17、stem. out .println(所以return语句不会执行。“异常外部内容”该代码发生了异常。所以第一行代码以下语句会被忽略, 该代码执行结果为"发生异常"、“ fin ally 内容”、public void change()try int x=9/4;System. out .println( ” 正常执行") return; catch (Exception e)System. out .println(fin ally J"发生异常");System. out .println( System. out .println(&qu
18、ot;finally 内容");"异常外部内容");该代码没有发生异常。顺序执行。先打“正常执行”,遇到return语句后,在返回前,先执行“ fin ally内容”再做返回。因为方法已经跳出,所以“异常外部内容”不会执行。publicfin ally在任何时候都会执行,但有一个例外那就是程序终止时,不会执行void change()try int x=9/4;正常执行”"发生异常");"finally 内容");"异常外部内容");System.out.pri ntl n(System.exit(O);
19、 catch (Exception e)System. out .println(fin ally System. out .println( System. out .println(因为没有异常,所以“正常执行”会打出来,但这个时候程序终止运行。 所以fin ally 内容不会打出来。9、关于异常对象异常也是一个对象。它是Exception类或子类的一个对象public void change()try int x=9/0;/1 catch (Exception e)/2System. out .println("发生异常");在执行到第1行时,发生了异常。这时候会产生
20、一个和异常相匹配的异常对象。然 后在第2行时,用一个Exception e的一个变量去指向它。这个时候,如果人为的抛出一个异常也可以达到相同的效果。 这就是throw语句。将显示的产生一个异常对象,并做抛出。 语法如下:throw 异常对象(throw new Exception()。10、传播异常一个方法可以抛出异常,这样的话,在方法里我们就不用去捕获方法里可能发生的相关 异常。那么谁去处理这个异常呢?由调用该方法的代码块去处理。那么怎么样在方法里 抛出异常呢?我们需要修改方法的声明头,声明方法传播的异常类型我们使用关键字throws来完成这个声明例:void c( ) throws Exc
21、eption void d( ) throws Excepti on 在d()方法中抛出了 Exception异常,但在方法体里却可以不产生异常对象。就象要开枪 先瞄准,但瞄准后可以不开枪。11、异常的类型异常会为编译期异常和运行期异常。(或检查异常和非检查异常)其中运行期异常是RuntionException类和它的子类。除此之外都是编译期异常。编译期异常是我们必须要捕获的,而运行期异常却可以捕获,也可以不捕获。就象警察 一样,大案和要案是必须要立案侦破的,而小偷小摸的毛贼,可以抓也可以不抓。编译异常我们必须要处理,要么用try-catch包围,要么做方法抛出。如果一个方法抛出编译期异常,那
22、么调用该方法时,必须处理,如果抛出运行期异常, 那么调用该方法时,可处理可不处理。void C( ) throws Exceptio n void a()tryc();catch(Exception e)System.out.println( 异常 ”;public class TExcepti onpublic static void main( Stri ng args)TExcepti on te = new TExcepti on();te.throwExcepti on();/1te.throwAExceptio n();/2te.throwCExceptio n();/3te.th
23、rowDExceptio n();/4public void throwAException() throws Throwablepublic void throwCExcetion() throws Exceptionpublic void throwException() throws MyExceptionpublic void throwDException() throws MyCExceptionclass MyCExcepti on exte nds Excepti onpublic MyCExceptio n()public MyCException(String msg)super(msg);class MyExcepti on exte nds Run timeExceptio npublic MyExcepti on()public MyException(String msg)super(msg);代码分析:在main方法里分别调用了四个方法。其中第1行代码调用throwException方法。该方法抛出 MyExce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025至2030年中国塑料风冷热切造粒机市场现状分析及前景预测报告
- 2025至2030年中国发电厂阀门牌市场现状分析及前景预测报告
- 护理查房的流程记录要求
- 人美版小学美术三年级上册教学计划实施
- 新人教版二年级数学下册教学难点攻克计划
- 培训学校质量管理人员岗位职责
- 校园暴力事件调查处理工作流程
- 2025年养老护理员专业知识测试卷-养老护理员老年护理团队协作试题
- 2025年养老护理员专业知识测试卷-养老护理员心理辅导技巧试题
- 内镜下诊治婴幼儿先天性食管肌层肥厚性狭窄:技术、案例与展望
- 商业数据分析的数字化工具与应用
- 旅行社与游客协议旅游合同
- 先天性甲状腺功能减退症诊治指南(2025)解读
- 2025-2030付费自习室行业市场深度分析及竞争格局与投资价值研究报告
- (二模)淮北市和淮南市2025届高三第二次质量检测英语试题(含答案详解)
- 腾讯入职合同协议
- 青州租房合同协议
- 新产品导入流程图
- 生产经理考试试题及答案
- 电力设备质量保证措施
- 电力调度题库
评论
0/150
提交评论