- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java异常处理机制探讨.doc
Java异常处理机制探讨 【摘 要】异常处理是Java运行机制的特征之一,它是Java语言健壮性的一个重要体现。本文介绍了异常的分类、异常的处理和异常的捕获策略。 【关键词】Java;异常;异常处理 0 引言 异常是程序在运行过程中发生的突发事件,比如除0溢出、数组越界、数字格式化等,这些事件阻止程序的正常运行,为了加强程序的健壮性,程序设计时,就必须要考虑到有可能发生的异常事件并做出相应的处理。 1 异常处理的概念 C语言中,通过使用if语句来判定是否出现了异常,同时,调用函数通过被调用函数的返回值感知在被调用函数中产生的异常事件并进行处理。 Java是面向对象的程序设计语言,通过异常对象调用方法来处理异常。异常处理对象是Java程序在运行时异常而自动产生的对象,发生不同的异常会产生不同的异常对象,这个对象会由JVM控制去执行相应的异常处理代码。 通常把生成异常对象并把它提交给JVM的过程称为抛出(throw)一个异常。JVM在方法的调用栈中查找,从生成异常的方法开始进行回朔,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。 2 异常的分类 异常是程序中的一些错误,但并不是所有的错误都是异常,并且有些异常需要做处理,有些则不需要捕获处理。 Java异常类层次结构,如图1所示。 图1 异常类层次结构 Throwable类是所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,这两种异常有很大的区别,也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception)。 1)Error和Exception Error是程序无法处理的错误,比如VirtuaMachineError、ThreadDeath等。这些错误发生时,Java虚拟机(JVM)一般会选择线程终止。Exception是程序本身可以处理的异常,这种异常分两大类运行时异常和非运行时异常。 2)运行时异常和非运行时异常 运行时异常都是RuntimeException类及其子类异常,如NumberFormatException、ArrayIndexOutOfBoundsException等,这些是编程时可以不用处理的异常,编译可以通过;非运行是运行时异常之外的异常,如IOException、FileNotFoundException等,是编程时必须要处理的异常,否则编译通不过。 3 异常的处理 Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。其中用try语句块来包含有可能产生异常的语句,如果块内出现异常,则异常会被抛出;catch语句块是用来捕获并处理这个异常;如果不想处理异常,也可以通过throws关键字在方法上声明该方法要抛出异常,由调度方法来处理此异常;关键字throw是在方法内部显示抛出异常对象。finally块是不管是否产生异常都会处理的代码块。 异常处理要注意的问题: 第一,try语句不能单独存在,可以和catch、finally组成try...catch...finally、try...catch、try...finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。 第二,try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。 第三,多个catch块时候,系统会按照catch语句的书写顺序,选择相应的catch块,以最先找到的catch为准,后面的catch块不会再执行,因此catch语句里面,捕获低级的异常应该写在前面,捕获高级的异常应该写在后面,否则低级异常将因为得不到执行而没有意义。 第四,throw语句后不允许再添加其他语句,因为执行到throw时,会转到执行异常处理的代码,throw之后的语句不会再执行。 第五,如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。 当程序抛出一个异常的时候,必须确保所有的异常“接收者”都收到有意义的信息。也就是说,必须选择合适的异常类型,以便方法的调用者程序可以根据异常的类型来做出正确的处理;必须设置有意义的异常信息,以便看到异常或日志记录的用户能明白发生了什么事;必须通过调用stacktrace方法反映出异常发生的最原始的位置信息,从而便于修改产生异常的代码。 4 异常的捕获策略 声明所有可能产生的异常,是极不明智的做法。因为会破坏方法的封装性,将方法的内部实现
文档评论(0)