欢迎来到天天文库
浏览记录
ID:30778142
大小:147.54 KB
页数:10页
时间:2019-01-03
《java中的checkedexception——美丽世界中潜藏的恶魔?-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Java中的CheckedException美丽世界中潜藏的恶魔?原文出处:Amber-Garden在使用Java编写应用的时候,我们常常需要通过第三方类库来帮助我们完成所需要的功能。有时候这些类库所提供的很多API都通过throws声明了它们所可能抛出的异常。但是在查看这些API的文档吋,我们却没有办法找到有关这些界常的详尽解释。在这种情况下,我们不能简单地忽略这些FHthrows所声明的异常:publicvoidshouldNotThrowCheckedException(){//该API调用可能抛出一个不明原因的CheckedExceptione
2、xceptionalAPT();}否则Java编译器会由于shouldNotThrowCheckedException()函数没冇声明It可能抛出的CheckedException而报错。但是如果通过throws标明了该函数所可能抛Ill的CheckedException,那么其它对shouldNotThrowCheckedException()函数的调用同样需要通过throws标明其可能抛出该CheckedException。哦,这口J真是一件令人烦燥的事情。那我们应该如何对这些CheckedException进行处理呢?在木文中,我们将对如何在Ja
3、va应用中使用及处理CheckedException进行简单地介绍。Java异常简介在详细介绍CheckedException所导致的问题之前,我们先用一小段篇幅简单介绍一下Java中的异常。在Java中,异常主耍分为三种:Exception,RuntimcExccption以及Erroro这三类异常都是Throwable的子类。直接从Exception派生的各个异常类型就是我们刚刚提到的CheckedExceptiono它的一个比较特殊的地方就是强制调用方对该异常进行处理。就以我们常见的用于读取一个文件内容的FileReader类为例。在该类的构造函
4、数声明中声明了其可能会抛出Fi1eNotFoundException:publicFileReader(StringfileName)throwsFilcNotFoundExccption{那么在调用该构造函数的函数中,我们需要通过try-catch…來处理该异常:publicvoidprocessFile(){try{FileReaderfileReader二newFileReader(inF订e);}catch(Fi1eNotFoundExceptionexception){//异常处理逻辑如果我们不通过try-catch…来处理该异常,那么我们就
5、不得不在函数声明中通过throws标明该函数会抛FileNotFoundException:publicvoidproccssFilcOthrowsFileNotFoundExccption{FileReaderfileReader=newFileReader(inFile);//可能抛岀FileNotFoundException而RuntimeExccption类的各个派生类则没有这种强制调用方对异常进行处理的需求。为什么这两种异常会冇如此大的区别呢?因为RuntimeException所表示的是软件开发人员没有正确地编写代码所导致的问题,如数组访问
6、越界等。而派生自Exception类的各个异常所表示的并不是代码木身的不足所导致的非正常状态,而是一系列应用本身也无法控制的情况。例如一个应用在尝试打开一个文件并写入的时候,该文件已经被另外一个应用打开从而无法写入。对于这些情况,Java通过CheckedException来强制软件开发人员在编写代码的时候就考虑对这些无法避免的情况的处理,从而提高代码质量。而Error则是一系列很难通过程序解决的问题。这些问题基木上是无法恢复的,例如内存空间不足等。在这种情况下,我们基本无法使得程序重新冋到正常轨道上。因此一•般情况下,我们不会对从E“or类派生的齐个
7、异常进行处理。而且由于其实际上与本文无关,因此我们不再对其进行详细讲解。天使变恶魔既然Java小的CheckedException能够提高用户代码质量,为什么还有那么多人反对它呢?原因很简单:它太容易被误用了。而在本节中,我们就将列岀这些误用情况并提出相应的网络上最为推荐的解决方案。无处不在的throws笫一种误用的情况就是CheckedException的广泛传播。在前面已经提到过,调用一个可能抛出CheckedException的APIII寸,软件开发人员可以有两种选择。其中一种选择就是在对该APT进行调用的函数上添加throws声明,并将该Che
8、ckedException向上传递:publicvoidprocessFile()throws
此文档下载收益归作者所有