编写一个圆类circle异常类(InputFormatException),当程序中用户输入的值不是整数时抛出此异常类,并进行处理。 用主

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
毕业设计(论文)基于Java的异常处理技术及其应用概要.doc 27页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:350 &&
毕业设计(论文)基于Java的异常处理技术及其应用概要
你可能关注的文档:
··········
··········
关于JDK和Java异常 2(一)Java异常定义 2(二)Java中的异常类 2(三)Java语言规范对异常处理的要求 4三
Java异常的处理机制 4(一)Java异常处理机制具体实现 4(二)Java中异常发生的原因 6(三)Java异常处理的优点 6四
Java异常处理技术及其应用 8(一)抛出异常 8(二)捕获异常 8(三)堆栈帧 9(四)自定义异常 11(五)关于图形界面程序的异常捕获 12五
Java异常处理基本原则 14(一)不要忽略已检查型异常 14(二)不要一次捕获所有的异常 15(三)使用finally块释放资源 16(四)异常不能影响对象的状态 17(五)注意丢失(或忽略)的异常 17(六)不要同时使用异常机制和返回值来处理异常 20(七)不要让try块过于庞大 21六
结束语 21致谢 21参考文献 22附录、源代码 22 基于Java的异常处理技术及其应用摘
本文以Java软件开发工具箱JDK1.5.0作为环境,通过与一些编程语言的错误处理相比较,介绍了Java中异常处理技术的由来、定义、规范和Java内建的异常类,讨论了Java中异常产生的原因、实现,还对Java异常处理机制的优点进行了简述,就Java异常处理技术从抛出异常、捕获异常、堆栈帧、自定义异常、图形界面程序异常捕获五个方面进行了讨论。本文还就Java异常处理技术的应用做了一些探讨,试图从软件开发者的角度说明Java异常处理技术在开发中一些有价值的应用。关键词
Java异常处理
引言在程序设计中,尽管编写检查和处理错误的程序代码很乏味,并且它们使程序源代码显得冗长,但是,错误检测和处理仍是任何健壮应用程序最重要的组成部分之一。传统的异常处理多采用返回值来标识程序中出现的异常情况,这是程序员熟悉的一种方式,但却有很多缺点。首先,一个API(Application Programming Interface 应用编程接口)可以返回任意的返回值,而这些返回值本身并不能解释是否代表一个异常情况发生或者发生异常的具体情况,需要调用API的程序自己判断并解释返回值的含义。其次,它并没有一种机制来保证异常情况一定会得到处理,调用程序可以简单地忽略该返回值,从而需要调用API的程序员记住去检测返回值并处理异常情况。这种方式还让程序代码变得晦涩冗长, 当进行容易出现异常情况的处理时,比如:I/O操作,程序中会出现很大的部分用于处理异常情况的switch分支,程序代码的可读性变得很差。相对于传统异常处理方式的缺点,Java异常处理机制提供了很好的解决方案。Java异常处理使开发人员不用编写特殊代码检测返回值就能够很容易地检测错误,并且把异常处理代码和异常产生代码明确地分开,通过抛出Java预定义或者自定义的异常,能够表明程序中出现了什么样的异常情况[1];而且Java的语言机制保证了异常一定会得到恰当的处理,合理地使用异常处理机制,会让程序代码更清晰。 二
关于JDK和Java异常(一)Java异常定义 早期的编程语言(比如C语言)没有异常处理,通常是遇到错误返回一个特殊的值或设定一个标志,并以此判断是不是有错误产生。随着系统规模的不断扩大,这种错误处理已经成为创建大型可维护程序的障碍了。于是在一些语言中出现了异常处理机制,比如在Basic中的异常处理语句“on error goto”,而Java则是在C++基础上建立了新的异常处理机制。Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。这种机制为复杂程序提供了强有力的控制方式。同时这些异常代码与“常规”代码分离,增强了程序的可读性,编写程序时也显得更灵活。
在编译时没有问题的Java源程序,在运行期可能还会发生错误,这种错误就称为异常(Exception)。异常也可认为是程序运行过程中违背正常指令流而产生的事件[2]。(二)Java中的异常类在Java中,所有的异常都是以类对象的形式存在的。每个异常都是Throwable类或其子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理[3]。Throwable是所有异常的基类,程序中一般不会直接抛出Throwable对象,Exception和Error是Throwable的子类,Exception下面又有RuntimeException和一般的Exception两类。可以把Java异常分为三类:第一类是Error,Error表示程序在运行期间出现了十分严重、不可恢复的错误,在这种情况下应用程序只能终止运行,例如Java虚拟机(JVM)出现错误。在EJB(Enterp
正在加载中,请稍后...本文重在Java中异常机制的一些概念。写本文的目的在于方便我很长时间后若是忘了这些东西可以通过这篇文章迅速回忆起来。 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。 1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。 1.3 异常处理的流程 1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象 1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码 2 异常的分类 2.1 异常的分类 2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。 2.1.2 Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。 2.2 每个类型的异常的特点 2.2.1 Error体系 Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形。应用程序不应该抛出这种类型的对象(一般是由虚拟机抛出)。如果出现这种错误,除了尽力使程序安全退出外,在其他方面是无能为力的。所以,在进行程序设计时,应该更关注Exception体系。 2.2.2 Exception体系 Exception体系包括RuntimeException体系和其他非RuntimeException的体系 2.2.2.1 RuntimeException RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等。处理RuntimeException的原则是:如果出现RuntimeException,那么一定是程序员的错误。例如,可以通过检查数组下标和数组边界来避免数组越界访问异常。 2.2.2.2 其他(IOException等等)这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环境中出现的外部错误。 2.3 与C++异常分类的不同 2.3.1 其实,Java中RuntimeException这个类名起的并不恰当,因为任何异常都是运行时出现的。(在编译时出现的错误并不是异常,换句话说,异常就是为了解决程序运行时出现的的错误)。 2.3.2 C++中logic_error与Java中的RuntimeException是等价的,而runtime_error与Java中非RuntimeException类型的异常是等价的。 3 异常的使用方法 3.1 声明方法抛出异常 3.1.1 语法:throws(略) 3.1.2 为什么要声明方法抛出异常?方法是否抛出异常与方法返回值的类型一样重要。假设方法抛出异常确没有声明该方法将抛出异常,那么客户程序员可以调用这个方法而且不用编写处理异常的代码。那么,一旦出现异常,那么这个异常就没有合适的异常控制器来解决。 3.1.3 为什么抛出的异常一定是已检查异常? RuntimeException与Error可以在任何代码中产生,它们不需要由程序员显示的抛出,一旦出现错误,那么相应的异常会被自动抛出。而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。遇到Error,程序员一般是无能为力的;遇到RuntimeException,那么一定是程序存在逻辑错误,要对程序进行修改(相当于调试的一种方法);只有已检查异常才是程序员所关心的,程序应该且仅应该抛出或处理已检查异常。 3.1.4 注意:覆盖父类某方法的子类方法不能抛出比父类方法更多的异常,所以,有时设计父类的方法时会声明抛出异常,但实际的实现方法的代码却并不抛出异常,这样做的目的就是为了方便子类方法覆盖父类方法时可以抛出异常。 3.2 如何抛出异常 3.2.1 语法:throw(略) 3.2.2 抛出什么异常?对于一个异常对象,真正有用的信息时异常的对象类型,而异常对象本身毫无意义。比如一个异常对象的类型是ClassCastException,那么这个类名就是唯一有用的信息。所以,在选择抛出什么异常时,最关键的就是选择异常的类名能够明确说明异常情况的类。 3.2.3 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。 3.2.4 创建自己的异常:当Java内置的异常都不能明确的说明异常情况的时候,需要创建自己的异常。需要注意的是,唯一有用的就是类型名这个信息,所以不要在异常类的设计上花费精力。 3.3 捕获异常如果一个异常没有被处理,那么,对于一个非图形界面的程序而言,该程序会被中止并输出异常信息;对于一个图形界面程序,也会输出异常的信息,但是程序并不中止,而是返回用户界面处理循环中。 3.3.1 语法:try、catch和finally(略)控制器模块必须紧接在try块后面。若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch 从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。 3.3.1.1 捕获多个异常(注意语法与捕获的顺序)(略) 3.3.1.2 finally的用法与异常处理流程(略) 3.3.2 异常处理做什么?对于Java来说,由于有了垃圾收集,所以异常处理并不需要回收内存。但是依然有一些资源需要程序员来收集,比如文件、网络连接和图片等资源。 3.3.3 应该声明方法抛出异常还是在方法中捕获异常?原则:捕捉并处理哪些知道如何处理的异常,而传递哪些不知道如何处理的异常 3.3.4 再次抛出异常 3.3.4.1 为什么要再次抛出异常?在本级中,只能处理一部分内容,有些处理需要在更高一级的环境中完成,所以应该再次抛出异常。这样可以使每级的异常处理器处理它能够处理的异常。 3.3.4.2 异常处理流程对应与同一try块的catch块将被忽略,抛出的异常将进入更高的一级。 4 关于异常的其他问题 4.1 过度使用异常首先,使用异常很方便,所以程序员一般不再愿意编写处理错误的代码,而仅仅是简简单单的抛出一个异常。这样做是不对的,对于完全已知的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。另外,异常机制的效率很差。 4.2 将异常与普通错误区分开对于普通的完全一致的错误,应该编写处理这种错误的代码,增加程序的鲁棒性。只有外部的不能确定和预知的运行时错误才需要使用异常。 4.3 异常对象中包含的信息一般情况下,异常对象唯一有用的信息就是类型信息。但使用异常带字符串的构造函数时,这个字符串还可以作为额外的信息。调用异常对象的getMessage()、toString()或者printStackTrace()方法可以分别得到异常对象的额外信息、类名和调用堆栈的信息。并且后一种包含的信息是前一种的超集。 常用异常:   UnsupportedOperationException不支持的操作   IllegalArgumentException非法参数   IndexOutOfBoundsException索引出界   IllegalStateException非法状态 异常跟普通的警告等有一定的区别。当应用程序发生异常时,会中断正在执行的程序的正常指令流。也就是说,发生异常后面的代码将得不到正确的执行。甚至还会触发数据库的回退操作。 &&& 在Java开发平台中,异常包括预定义异常与自定义异常。这两种异常的类型互为补充。作为一个合格的程序开发人员,要善于在应用程序中使用异常。这可以提高应用程序的交互性。同时,也是保证应用程序正常运行的前提。故异常的处理对于开发一个优秀的应用程序来说非常的重要。为此笔者认为程序开发人员应该对Java应用程序的常见异常有一个深入的了解。只有在了解这些常见异常的情况下,才能够做好自定义异常的处理。 &&& 一、常见异常的类型与原因。 &&& 对于Java应用程序的常见异常,笔者认为程序开发人员要从两个方面去了解。一是要知道有哪些常见的Java应用程序异常,二是需要知道哪些原因可能会造成这个异常。这不仅需要程序管理人员在日常工作中要注意积累,在必要的情况下还需要去从其它渠道收集资料。笔者对此就进行一个分析,希望能够对各位程序开发人员有一定的帮助。 &&& 1、 SQLException:操作数据库异常类。 &&& 现在的Java应用程序大部分都是依赖于数据库运行的。当Java应用程序与数据库进行沟通时如果产生了错误,就会触发这个类。同时会将数据库的错误信息通过这个类显示给用户。也就是说,这个操作数据库异常类是数据库与用户之间异常信息传递的桥梁。如现在用户往系统中插入数据,而在数据库中规定某个字段必须唯一。当用户插入数据的时候,如果这个字段的值跟现有的纪录重复了,违反了数据库的唯一性约束,此时数据库就会跑出一个异常信息。这个信息一般用户可能看不到,因为其发生在数据库层面的。此时这个操作数据库异常类就会捕捉到数据库的这个异常信息,并将这个异常信息传递到前台。如此的话,前台用户就可以根据这个异常信息来分析发生错误的原因。这就是这个操作数据库异常类的主要用途。在Java应用程序中,所有数据库操作发生异常时,都会触发这一个类。所有此时Java应用程序本身的提示信息往往过于笼统,只是说与数据库交互出现错误,没有多大的参考价值。此时反而是数据库的提示信息更加有使用价值。 &&& 2、 ClassCastException:数据类型转换异常。 &&& 在Java应用程序中,有时候需要对数据类型进行转换。这个转换包括显示的转换与隐式的转换。不过无论怎么转换,都必须要符合一个前提的条件,即数据类型的兼容性。如果在数据转换的过程中,违反了这个原则,那么就会触发数据类型转换异常。如现在在应用程序中,开发人员需要将一个字符型的日期数据转换为数据库所能够接受的日期型数据,此时只需要在前台应用程序中进行控制,一般不会有问题。但是,如果前台应用程序缺乏相关的控制,如用户在输入日期的时候只输入月、日信息,而没有年份的信息。此时应用程序在进行数据类型转换的时候,就会出现异常。根据笔者的经验,数据类型转换异常在应用程序开发中使一个出现的比较多的异常,也是一个比较低级的异常。因为大部分情况下,都可以在应用程序窗口中对数据类型进行一些强制的控制。即在数据类型进行转换之前,就保证数据类型的兼容性。如此的话,就不容易造成数据类型的转换异常。如在只允许数值类型的字段中,可以设置不允许用户输入数值以外的字符。虽然说有了异常处理机制,可以保证应用程序不会被错误的运行。但是在实际开发中,还是要尽可能多的预见错误发生的原因,尽量避免异常的发生。 &&& 3、 NumberFormatException:字符串转换为数字类型时抛出的异常。 &&& 在数据类型转换过程中,如果是字符型转换为数字型过程中出现的问题,对于这个异常在Java程序中采用了一个独立的异常,即NumberFormatException.如现在讲字符型的数据&123456&转换为数值型数据时,是允许的。但是如果字符型数据中包含了非数字型的字符,如123#56,此时转换为数值型时就会出现异常。系统就会捕捉到这个异常,并进行处理。 Java应用程序中常见的异常类还有很多。如未找到相应类异常、不允许访问某些类异常、文件已经结束异常、文件未找到异常、字段未找到异常等等。一般系统开发人员都可以根据这个异常名来判断当前异常的类型。虽然不错,但是好记性不如烂笔头。程序开发人员在必要的时候(特别是存在自定义异常的时候),最后手头有一份异常明细表。如此的话,无论是应用程序在调试过程中发现问题,还是运行过程中接到用户的投诉,都可以及时的根据异常名字来找到异常发生的原因。从而可以在最短时间内解决异常,恢复应用程序的正常运行。这个措施笔者用了很多年,非常的有效。 &&& 二、异常管理的实用建议。 &&& 对于操作数据库异常来说,Java应用程序只提供了一个异常类。故光凭Java应用程序的错误信息,往往不能够帮助应用程序人员排除错误的原因。只能够指名是应用程序错误还是数据库错误导致的这个异常。为了更进一步指明问题的原因,在数据库层面定义异常的时候,最好能够说明具体的原因。如前台应用程序可能会调用数据库的函数或者过程。此时在数据库的函数或者过程中做好能够说明某个异常的具体原因。如根据某个基础表生成另一张表的时候,某个字段不能够为空等等。将这些异常信息说明清楚后,如果真的遇到类似的异常时,操作数据库异常类就会将数据库的异常信息反会给前台用户。从而有利于用户寻找问题的原因,并在最短时间内改正。当然,这需要Java程序员与数据库设计人员进行协调。 &&& 其次需要注意的是,异常并不是常态。也就是说,大部分异常可以通过前提的合理预见与预防,来消除。如设计到四则运算,可以在前台应用程序窗口中限制在除数字段内输入0值等手段来消除应用程序运行中可能产生的异常。不过这往往要求应用程序开发人员有比较丰富的工作经验以及由比较严密的思维逻辑。虽然这有一定的难度,但是笔者认为程序开发人员还是应该往这方面努力,而不要老是让用户作为你的试验品,让用户来发现应用程序中的设计Bug.笔者认为,只有一些实在是程序人员无法控制的因素才允许抛出异常。如果应用程序开发人员能够意识到这种错误、但是仍然没有引起重视或者采取有效的措施防止出现这种异常,那么笔者是不允许的。
ArithmeticException(除数为0的异常), BufferOverflowException(缓冲区上溢异常), BufferUnderflowException(缓冲区下溢异常), IndexOutOfBoundsException(出界异常), NullPointerException(空指针异常), EmptyStackException(空栈异常), IllegalArgumentException(不合法的参数异常), NegativeArraySizeException, NoSuchElementException, SecurityException, SystemException, UndeclaredThrowableException
1. java.lang.NullPointerException  异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)  2. java.lang.ClassNotFoundException  异常的解释是"指定的类不存在"。  3. java.lang.ArithmeticException  这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常。  4. java.lang.ArrayIndexOutOfBoundsException  异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。  5. java.lang.IllegalArgumentException  这个异常的解释是"方法的参数错误",比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。  6. java.lang.IllegalAccessException  这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常
阅读(...) 评论()当程序出现异常时,应当次啊去一些异常处理措施:
·返回到一种安全状态,并能够让用户执行一些其他命令;
·允许用户保存所有操作结果,并以合适的方式终止程序。
需要关注的异常问题:
1、用户输入错误
2、设备错误
3、物理限制
4、代码错误
异常具有自己的语法和特定的继承结构,下面开始介绍:
11.1.1异常分类
所有已成都由Throwable继承而来,Throwable分为Error和Exception;Exception又分为RuntimeException和IOException。
Error类描述Java运行是系统的内部错误和资源耗尽错误。这种情况很少出现
RuntimeException是由程序本身导致的异常;IOException是由其他问题如I/O问题导致的异常。
RuntimeException的异常有以下几种情况:
·错误的类型转换
·数组访问越界(通过检查数组下标是否越界来避免ArrayIndexOutOfBoundsException异常)
·访问空指针(在使用变量之前检测是否为空来避免NullPointerException异常)
如果出现RuntimeException表明一定是你的问题!!!
IOException的异常包括:
·试图在文件尾部读取数据
·试图打开一个错误格式的URL
·试图根据给定的字符串查找class文件,而这个字符串代表的类不存在
Java规定将派生于Error类和RuntimeException类的异常称为未检查异常,IOException称为已检查异常。
11.1.2声明已检查异常
方法应在首部声明有可能出现的异常。例如,下面是标准类库中提供的FileInputStream类的一个构造器的声明:
public&FileInputStream(String&name)&throws&FileNotFoundException&&
表示该构造器将根据给定的参数String创建一个FileInputStream对象,也有可能抛出一个FileNotFoundException异常。
遇到以下状况时要抛出异常:
1、调用一个已检查异常的方法
2、程序运行时发现错误,利用throw语句抛出一个已检查异常
3、程序错误
4、JVM和运行时库出现的内部异常
11.1.3如何抛出异常
抛出存在的异常类:
1、找到一个合适的异常类
2、创建这个类的对象
3、将对象抛出。
方法一旦被抛出,这个方法就不能返回到调用者。
11.1.4创建异常类
当遇到任何标准异常类都无法准确描述的问题时,就可以自己创建异常类。要做的是定义一个派生于Exception的类,或派生于Exception的子类。例如:
定义一个派生于IOException的类,定义的类应该包含两个构造器,一个实默认构造器,一个实带有详细描述信息的构造器(超类Throwable的toStrring方法会打印出这些详细信息,这样便于调试)
class&FileFormatException&extends&IOException&{&&&&&&public&FileFormatException()&{}&&&&&&public&FileFormatException(String&gripe)&{&&&&&&&&&&super(gripe);&&&&&&}&&}&&&&&&String&readData(BufferedReader&in)&throws&FileFormatException&{&&&&&&....&&&&&&while(...)&{&&&&&&&&&&if&(ch&==&1)&{&&&&&&&&&&&&&&if&(n&&&len)&&&&&&&&&&&&&&&&&&throw&new&FileFormatException();&&&&&&&&&&}&&&&&&&&&&....&&&&&&}&&&&&&return&s;&&}&&
API:java.lang.Throwable 1.0
·Throwable()
构造一个新的Throwable对象,该对象没有详细的描述信息
·Throwable(String message)
构造一个新的throwable对象,该对象有详细的描述信息
·String getMessage()
获取Throwable对象的详细描述信息
阅读(...) 评论()&img src=&/v2-6b74cfbf77f4cab3f5d765d0abee5a34_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&/v2-6b74cfbf77f4cab3f5d765d0abee5a34_r.jpg&&&blockquote&文章来源:&a href=&/?target=http%3A///blog/jexception/original/practical.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&leaforbook - 如何正确使用Java异常处理机制&i class=&icon-external&&&/i&&/a&&br&作者:士别三日&/blockquote&&p&&b&第一节 异常处理概述&/b&&/p&&p&&b&第二节 Java异常处理类&/b&&/p&&ul&&li&2.1 Throwable&br&&/li&&ul&&li&2.1.1 Throwable有五种构造方法&/li&&li&2.1.2 Throwable的所有成员方法&/li&&/ul&&li&2.2 Error&br&&/li&&li&2.3 Exception&br&&/li&&li&2.4 RuntimeException&br&&/li&&li&2.5 Checked Exception&br&&/li&&li&2.6 Uncheck Exception&br&&/li&&li&2.7 总结&br&&/li&&/ul&&p&&b&第三节 Java异常处理执行流程探究&/b&&/p&&ul&&li&3.1 流程一&/li&&li&3.2 流程二&/li&&li&3.3 流程三&/li&&li&3.4 流程四&/li&&li&3.5 流程五&/li&&li&3.6 流程六&/li&&li&3.7 流程七&/li&&li&3.8 流程八&/li&&li&3.9 总结&/li&&/ul&&p&&b&第四节 Java异常处理实践原则&/b&&/p&&ul&&li&4.1 使用异常,而不使用返回码&/li&&li&4.2 利用运行时异常设定方法使用规则&/li&&li&4.3 消除运行时异常&/li&&li&4.4 正确处理检查异常&/li&&li&4.5 使主流程代码保持整洁&/li&&li&4.6 使用try-with-resources&/li&&li&4.7 尽量处理最具体的异常&/li&&li&4.8 设计自己的异常类型要遵循的原则&/li&&/ul&&br&&p&本文的目标并不是介绍Java异常处理机制相关概念和语法,如果你有这方面的需求,请参考我的“ &a href=&/?target=http%3A///blog/jexception/index.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java异常 官方文档翻译系列&i class=&icon-external&&&/i&&/a&”文章。本文的目标是如何正确使用Java异常处理机制。&br&&/p&&h2&&strong&第一节 异常处理概述&/strong&&/h2&&p&在理想境界中,程序永远不会出现问题,用户输入的数据永远是正确的,逻辑没有任何问题 ,选择打开的文件也一定是存在的,内存永远是够用的……反正没有任何问题!但是一旦出现这些问题,如果处理不好,程序就不能正常运行了,用户就有可能再也不使用这个程序了。&/p&&p&要处理异常,必先知道异常发生的原因;要知道异常发生的原因,必先知道异常发生的场景。你的程序可能和任何其他实体交互的时候,都可能发生异常。Java程序中,都是利用方法(Method)和其他实体进行交互。所以异常的发生、抛出、声明和处理都是在方法内。下图是Java程序可能和其他实体交互的概要图:&/p&&p&&strong&图1:你的方法与其他实体交互概要图&/strong&&br&&/p&&img src=&/v2-b051ff37bfaef4e8049065c_b.png& data-rawwidth=&960& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-b051ff37bfaef4e8049065c_r.png&&&p&如图1所示,你写的方法和外部实体交互大概可以分为五类:&/p&&ol&&li&和资源(Resource)交互,见图⑤处。这里资源的范围很广,比如进程外部的数据库,文件,SOA服务,其他各种中间件;进程内的类,方法,线程……都算是资源。&/li&&li&给进程内的其他方法(User Method)提供服务,见图②处。&/li&&li&依赖进程内的其他方法(Server Method),见图③处。包括Java平台提供的方法和其他第三方供应方提供的方法。&/li&&li&和系统环境交互,见图⑧处。系统环境可能是直接环境——JVM,也可能是间接环境——操作系统或硬件等。&/li&&li&给外部实体提供服务,见图①处。这种外部实体一般会通过容器(或其他类似的机制)和你的方法进行交互。所以,可以归为②,不予探讨。&/li&&/ol&&p&Java方法和每一类实体进行交互时,都可能发生异常。&/p&&p&当和资源交互时,常常会因为资源不可用而发生异常,比如发生找不到文件、数据库连接错误、找不到类、找不到方法……等等状况。有可能是直接产生的,见图⑤处;有可能是间接产生的,比如图⑥处发生异常,Server Method把异常抛给Your Method,图③处就间接发生了异常。一般来说,你写的方法间接发生这类异常的可能性比直接发生要大得多,因为直接产生这类异常的方法在Java平台中已经提供了。对于这类异常,通常有以下几个特点:&/p&&ul&&li&问题来自外部,你的方法本身的正常流程逻辑没问题。&/li&&li&这类异常通常是暂时的,过段时间就可用了(经过资源维护者的彻夜奋战……)。最终用户通常也可以接受暂时的等待或采取替补方案。&/li&&li&你的程序的其他功能还可以用。&/li&&/ul&&p&这时,你的方法应该这样处理:&/p&&ul&&li&返回到一种安全状态,并能够让用户执行一些其他的命令(比如支付宝支付失败时返回一个弹出框,说明余额不足等原因,让用户重新选择其他支付渠道);或者&/li&&li&允许用户保存所有操作的结果,并以适当的方式终止程序(比如保存填了一半的表单)。&/li&&/ul&&p&然后,你应该协调各方,促进资源恢复可用,消除异常。&/p&&p&当给用户方法(User Method )提供服务时,用户可能会传入一些不合法的数据(或者其他不恰当的使用方法),进而对程序的正常流程造成破坏。你的方法应该检查每一个输入数据,如果发现不合法的数据,马上阻止执行流程,并通知用户方法。&/p&&p&当调用服务方法(Server Method )时,有可能会发生两类异常。一类是你的使用方法不正确,导致服务中止;一类是服务方法出了异常,然后传递给你的方法。如果是第一种异常,你应该检查并修改你的方法逻辑,消除BUG。对于第二类异常,你要么写一个处理器处理,要么继续传递给上层方法。&/p&&p&当和系统环境交互时,有可能因为JVM参数设置不当,有可能因为程序产生了大量不必要的对象,也有可能因为硬故障(操作系统或硬件出了问题),导致整个程序不可用。当这类异常发生时,最终用户没法选择其他替代方案,操作到一半的数据会全部丢失。你的方法对这类异常一般没什么办法,既不能通过修改主流程逻辑来消除,也不能通过增加异常处理器来处理。所以通常你的方法对这类异常不需要做任何处理。但是你必须检查进程内的所有程序和系统环境是否正常,然后协调各方,修改BUG或恢复环境。&/p&&p&Java的异常都是发生在方法内,所以研究Java异常,要以你设计的方法为中心。我们以“你的方法 ”为中心,总结一下处理办法:当服务方法告诉“你的方法 ”的主流程逻辑有问题时,就要及时修复BUG来消除异常;当用户方法非法使用“你的方法”时,应该直接中止主流程,并通知用户方法,强迫用户方法使用正确的方式,防止问题蔓延;当服务方法传递一个异常给“你的方法”时,你要判断“你的方法”是否合适处理这个异常,如果不合适,传递给上层方法,如果合适,写一个异常处理器处理这个异常。当系统环境出了问题,“你的方法”什么也做不了。&/p&&p&刚才以“你的方法”为中心,总结了在“你的方法”内部的处理办法。现在以“你”为中心,总结一下方法外部的处理方法:当资源不可用的时候,你应该协调各方,恢复资源;当发生系统故障时,你应该协调各方,恢复系统。&/p&&p&现在,已经基本分析清楚了异常发生的原因,以及相应的应对方法。下一节正式介绍Java异常处理机制。&/p&&h2&&strong&第二节 Java异常处理类&/strong&&/h2&&p&Java把异常当做是破坏正常流程的一个事件,当事件发生后,就会触发处理机制。&/p&&p&Java有一套独立的异常处理机制,在遇到异常时,方法并不返回任何值(返回值属于正常流程),而是抛出一个封装了错误信息的对象。下图是Java异常处理机制类层级结构图:&/p&&p&&strong&图2:Java异常处理机制类层级结构图&/strong&&/p&&img src=&/v2-e97e902e4fb50e110bda5e_b.png& data-rawwidth=&346& data-rawheight=&243& class=&content_image& width=&346&&&h3&&strong&2.1 Throwable&/strong&&/h3&&p&所有的异常对象都派生于Throwable类的一个实例。&/p&&h4&&strong&2.1.1 Throwable有五种构造方法:&/strong&&/h4&&img src=&/v2-8de1f4d21bad19ad1aebc8f8aec5c530_b.jpg& data-rawwidth=&800& data-rawheight=&227& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-8de1f4d21bad19ad1aebc8f8aec5c530_r.jpg&&&p&&b&备注:&/b&&/p&&ul&&li&suppression:被压抑的异常。想了解更多信息,请参看我的译文“&a href=&/?target=http%3A///blog/jexception/translate/tryResourceClose.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&try-with-resources语句&i class=&icon-external&&&/i&&/a&”。&/li&&li&strack trace:堆栈跟踪。是一个方法调用过程列表,它包含了程序执行过程中方法调用的具体位置。&/li&&/ul&&h4&&strong&2.1.2 Throwable的所有成员方法:&/strong&&/h4&&img src=&/v2-5e08f3d5cc18cc3830000_b.jpg& data-rawwidth=&801& data-rawheight=&520& class=&origin_image zh-lightbox-thumb& width=&801& data-original=&/v2-5e08f3d5cc18cc3830000_r.jpg&&&img src=&/v2-6d5faff08d72f575fff0a_b.jpg& data-rawwidth=&800& data-rawheight=&613& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-6d5faff08d72f575fff0a_r.jpg&&&img src=&/v2-8cfa80b9620ceac4f092d1_b.jpg& data-rawwidth=&800& data-rawheight=&250& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-8cfa80b9620ceac4f092d1_r.jpg&&&p&备注:&/p&&ul&&li&所有派生于Throwable类的异常类,基本都没有这些成员方法,也就是说所有的异常类都只是一个标记,记录发生了什么类型的异常(通过标记,编译期和JVM做不同的处理),所有实质性的行为Throwable都具备了。&/li&&li&综上,在一个Throwable里面可以获取什么信息?&ul&&li&获取堆栈跟踪信息(源代码中哪个类,哪个方法,第几行出现了问题……从当前代码到最底层的代码调用链都可以查出来)&/li&&li&获取引发当前Throwable的Throwable。追踪获取底层的异常信息。&/li&&li&获取被压抑了,没抛出来的其他Throwable。一次只能抛出一个异常,如果发生了多个异常,其他异常就不会被抛出,这时可以通过加入suppressed异常列表来解决(JDK7以后才有)。&/li&&li&获取基本的详细描述信息&/li&&/ul&&/li&&/ul&&p&从图2可以看出,Throwable类只有两个直接继承者:Error和Exception。然后Exception又分为RuntimeException和Checked Exception。&/p&&h3&&strong&2.2 Error&/strong&&/h3&&p&在Java中, 由系统环境问题引起的异常,一般都继承于Error类。&/p&&p&对于Error类:&/p&&ul&&li&一般开发者不要自定义Error子类,因为它代表系统级别的错误。与一般的程序无关。&/li&&li&在Java异常处理机制中,Error不强制捕获或声明,也就是不强制处理。因为程序本身对此类错误无能为力。一般情况下我们只要把堆栈跟踪信息记录下来就行。&/li&&/ul&&p&下列是Java平台中直接继承于Error的错误类型:&/p&&p&&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/annotation/AnnotationFormatError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AnnotationFormatError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/AssertionError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AssertionError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/AWTError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AWTError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/nio/charset/CoderMalfunctionError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CoderMalfunctionError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/parsers/FactoryConfigurationError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FactoryConfigurationError&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/stream/FactoryConfigurationError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FactoryConfigurationError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/io/IOError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IOError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/LinkageError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LinkageError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/ServiceConfigurationError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ServiceConfigurationError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/ThreadDeath.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ThreadDeath&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/transform/TransformerFactoryConfigurationError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TransformerFactoryConfigurationError&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/VirtualMachineError.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VirtualMachineError&i class=&icon-external&&&/i&&/a&&/p&&h3&&strong&2.3 Exception&/strong&&/h3&&p&在Java中,除了系统环境问题引起的异常,一般都继承于Exception类。Exception分为RuntimeException和Checked Exception。Checked Exception必须要捕获或声明。而RuntimeException不强制。&/p&&p&对于Exception类:&/p&&ul&&li&如果你创建了一个异常类型,直接继承于Exception,那么这个异常类型将属于检查异常(Checked Exception)。&/li&&/ul&&h3&&strong&2.4 RuntimeException&/strong&&/h3&&p&在Java中,由于接口方法使用不当造成的异常,一般属于RuntimeException,也就是运行时异常。&/p&&p&对于RuntimeException:&/p&&ul&&li&如果你调用服务方法的方式不正确,你应该马上修改代码,避免发生RuntimeException&/li&&li&如果是用户方法调用你的方法的方式不正确,你应该立刻抛出RuntimeException,强制让使用者修正代码或改变使用方式,防止问题蔓延&/li&&li&一般情况下,不要捕获或声明RuntimeException。因为问题在于你的程序本身有问题,如果你用异常流程处理了,反而让正常流程问题一直存在&/li&&/ul&&p&下列是Java平台中直接继承于RuntimeException的运行时异常:&/p&&p&&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/annotation/AnnotationTypeMismatchException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AnnotationTypeMismatchException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/ArithmeticException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ArithmeticException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/ArrayStoreException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ArrayStoreException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/nio/BufferOverflowException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BufferOverflowException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/nio/BufferUnderflowException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BufferUnderflowException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/swing/undo/CannotRedoException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CannotRedoException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/swing/undo/CannotUndoException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CannotUndoException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/ClassCastException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ClassCastException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/color/CMMException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CMMException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/ConcurrentModificationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ConcurrentModificationException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/bind/DataBindingException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DataBindingException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/w3c/dom/DOMException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DOMException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/EmptyStackException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EmptyStackException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/EnumConstantNotPresentException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EnumConstantNotPresentException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/w3c/dom/events/EventException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EventException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/nio/file/FileSystemAlreadyExistsException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FileSystemAlreadyExistsException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/nio/file/FileSystemNotFoundException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FileSystemNotFoundException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/IllegalArgumentException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IllegalArgumentException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/IllegalMonitorStateException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IllegalMonitorStateException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/geom/IllegalPathStateException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IllegalPathStateException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/IllegalStateException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IllegalStateException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/IllformedLocaleException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IllformedLocaleException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/image/ImagingOpException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ImagingOpException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/annotation/IncompleteAnnotationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IncompleteAnnotationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/IndexOutOfBoundsException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IndexOutOfBoundsException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/JMRuntimeException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JMRuntimeException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/w3c/dom/ls/LSException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LSException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/reflect/MalformedParameterizedTypeException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MalformedParameterizedTypeException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/lang/model/type/MirroredTypesException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MirroredTypesException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/MissingResourceException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MissingResourceException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/NegativeArraySizeException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NegativeArraySizeException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/NoSuchElementException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NoSuchElementException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/crypto/NoSuchMechanismException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NoSuchMechanismException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/NullPointerException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NullPointerException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/color/ProfileDataException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ProfileDataException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/security/ProviderException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ProviderException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/nio/file/ProviderNotFoundException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ProviderNotFoundException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/image/RasterFormatException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RasterFormatException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/concurrent/RejectedExecutionException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RejectedExecutionException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/SecurityException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SecurityException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/omg/CORBA/SystemException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SystemException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/bind/TypeConstraintException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TypeConstraintException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/TypeNotPresentException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TypeNotPresentException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/reflect/UndeclaredThrowableException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UndeclaredThrowableException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/lang/model/UnknownEntityException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnknownEntityException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/print/attribute/UnmodifiableSetException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnmodifiableSetException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/UnsupportedOperationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnsupportedOperationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/ws/WebServiceException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WebServiceException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/invoke/WrongMethodTypeException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&WrongMethodTypeException&i class=&icon-external&&&/i&&/a&&/p&&h3&&strong&2.5 Checked Exception&/strong&&/h3&&p&在Java中,直接或间接因为“资源”问题引起的异常,一般属于检查异常(Checked Exception) 。检查异常继承于Exception,而不继承于RuntimeException。&/p&&p&对于检查异常:&/p&&ul&&li&必须捕获或声明&/li&&li&交给关心这个异常的方法处理&/li&&li&异常处理器应该引导用户接下来怎么办,至少做到安全退出&/li&&/ul&&p&下列是Java平台中直接继承于Exception的检查异常:&/p&&p&&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/security/acl/AclNotFoundException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AclNotFoundException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/rmi/activation/ActivationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ActivationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/rmi/AlreadyBoundException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlreadyBoundException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/omg/CORBA/portable/ApplicationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ApplicationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/AWTException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AWTException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/prefs/BackingStoreException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BackingStoreException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/BadAttributeValueExpException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BadAttributeValueExpException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/BadBinaryOpValueExpException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BadBinaryOpValueExpException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/swing/text/BadLocationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BadLocationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/BadStringOperationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BadStringOperationException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/concurrent/BrokenBarrierException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&BrokenBarrierException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/security/cert/CertificateException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CertificateException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/CloneNotSupportedException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&CloneNotSupportedException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/zip/DataFormatException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DataFormatException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/datatype/DatatypeConfigurationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DatatypeConfigurationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/security/auth/DestroyFailedException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DestroyFailedException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/concurrent/ExecutionException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ExecutionException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/swing/tree/ExpandVetoException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ExpandVetoException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/FontFormatException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FontFormatException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/security/GeneralSecurityException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GeneralSecurityException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/ietf/jgss/GSSException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GSSException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/instrument/IllegalClassFormatException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IllegalClassFormatException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/InterruptedException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&InterruptedException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/beans/IntrospectionException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IntrospectionException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/InvalidApplicationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&InvalidApplicationException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/sound/midi/InvalidMidiDataException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&InvalidMidiDataException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/prefs/InvalidPreferencesFormatException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&InvalidPreferencesFormatException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/modelmbean/InvalidTargetObjectTypeException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&InvalidTargetObjectTypeException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/io/IOException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&IOException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/bind/JAXBException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JAXBException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/JMException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&JMException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/crypto/KeySelectorException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&KeySelectorException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/security/acl/LastOwnerException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LastOwnerException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/sound/sampled/LineUnavailableException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LineUnavailableException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/crypto/MarshalException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MarshalException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/sound/midi/MidiUnavailableException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MidiUnavailableException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/datatransfer/MimeTypeParseException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MimeTypeParseException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/activation/MimeTypeParseException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MimeTypeParseException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/naming/NamingException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NamingException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/geom/NoninvertibleTransformException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NoninvertibleTransformException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/rmi/NotBoundException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NotBoundException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/security/acl/NotOwnerException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&NotOwnerException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/text/ParseException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ParseException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/parsers/ParserConfigurationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ParserConfigurationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/print/PrinterException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PrinterException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/print/PrintException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PrintException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/security/PrivilegedActionException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PrivilegedActionException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/beans/PropertyVetoException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PropertyVetoException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/ReflectiveOperationException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ReflectiveOperationException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/security/auth/RefreshFailedException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RefreshFailedException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/omg/CORBA/portable/RemarshalException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&RemarshalException&i class=&icon-external&&&/i&&/a&,
&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/xml/sax/SAXException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SAXException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/script/ScriptException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ScriptException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/rmi/server/ServerNotActiveException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ServerNotActiveException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/soap/SOAPException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SOAPException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/sql/SQLException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQLException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/concurrent/TimeoutException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TimeoutException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/util/TooManyListenersException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TooManyListenersException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/transform/TransformerException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TransformerException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/crypto/dsig/TransformException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&TransformException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/lang/instrument/UnmodifiableClassException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnmodifiableClassException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/sound/sampled/UnsupportedAudioFileException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnsupportedAudioFileException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/security/auth/callback/UnsupportedCallbackException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnsupportedCallbackException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/awt/datatransfer/UnsupportedFlavorException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnsupportedFlavorException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/swing/UnsupportedLookAndFeelException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UnsupportedLookAndFeelException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/crypto/URIReferenceException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&URIReferenceException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/java/net/URISyntaxException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&URISyntaxException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/org/omg/CORBA/UserException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&UserException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/transaction/xa/XAException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XAException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/management/modelmbean/XMLParseException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XMLParseException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/crypto/dsig/XMLSignatureException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XMLSignatureException&i class=&icon-external&&&/i&&/a&,&a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/stream/XMLStreamException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XMLStreamException&i class=&icon-external&&&/i&&/a&, &a href=&/?target=http%3A//tool.oschina.net/uploads/apidocs/jdk_7u4/javax/xml/xpath/XPathException.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&XPathException&i class=&icon-external&&&/i&&/a&&/p&&h3&&strong&2.6 Uncheck Exception&/strong&&/h3&&p&Error和RuntimeException统称为非检查异常。两者的共同点就是都不被强制捕获或声明。实际上两者描述问题的范围完全没有交集。&/p&&h3&&strong&2.7 总结&/strong&&/h3&&p&所有的功能都在Throwable类里面实现了,子类只需要直接继承或间接继承它,并且加上需要的构造方法就行(一般而言,第一第二个构造方法是必须的,也可以全部加上),而且构造方法通常只需要一行代码:super(...),也就是说只要调用父类的构造方法就行了。Java把异常分为三类(Error,Checked Exception,RuntimeException),只是在语法层面上有不同的标记而已。它们自身拥有的功能一样,运行时系统处理它们的方式也是一样的(你也可以捕获或声明非检查异常),不同的是编译器对它们的区别对待(检查异常必须要在代码里处理,非检查异常就不需要),以及程序员对它们的区别对待(这需要程序员遵循良好的实践原则)。&/p&&p&这三类异常全部覆盖了第一节中所描述的异常发生场景,图1中,④⑤⑥处可能会发生Checked Exception,②③处既可能会发生RuntimeException也可能会发生Checked Exception,⑦⑧⑨处可能会发生Error。①处已经超出了Java异常处理机制的范畴(这属于容器要考虑的问题),通常在数据中加入返回码来通知异常信息。&/p&&p&理解了每一类异常对应的场景,很多人其实已经知道该怎么用了,不必往下看了。&/p&&h2&&strong&第三节 Java异常处理执行流程探究&/strong&&/h2&&p&首先设计两个方法,一个方法可能会抛出RuntimeException,一个方法可能会抛出Checked Exception。&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&n&&String&/span& &span class=&nf&&runtimeServerMethod&/span&&span class=&o&&(&/span&&span class=&n&&String&/span& &span class=&n&&s&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&k&&if&/span&&span class=&o&&(&/span&&span class=&n&&s&/span&&span class=&o&&==&/span&&span class=&kc&&null&/span&&span class=&o&&)&/span& &span class=&o&&{&/span&
&span class=&k&&throw&/span& &span class=&k&&new&/span& &span class=&n&&RuntimeException&/span&&span class=&o&&(&/span&&span class=&s&&&runtimeServerMethod方法的字符串不能为空&&/span&&span class=&o&&)&/span&
&span class=&o&&}&/span&
&span class=&k&&return&/span& &span class=&n&&s&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&span class=&kd&&private&/span& &span class=&n&&BufferedReader&/span& &span class=&n&&bufferedReader&/span&&span class=&o&&;&/span&
&span class=&kd&&public&/span& &span class=&n&&String&/span& &span class=&nf&&checkedServerMethod&/span&&span class=&o&&(&/span&&span class=&n&&String&/span& &span class=&n&&s&/span&&span class=&o&&)&/span& &span class=&kd&&throws&/span& &span class=&n&&IOException&/span& &span class=&o&&{&/span&
&span class=&n&&File&/span& &span class=&n&&file&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&File&/span&&span class=&o&&(&/span&&span class=&n&&s&/span&&span class=&o&&);&/span&
&span class=&n&&Reader&/span& &span class=&n&&reader&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&FileReader&/span&&span class=&o&&(&/span&&span class=&n&&file&/span&&span class=&o&&);&/span&
&span class=&n&&bufferedReader&/span& &span class=&o&&=&/span& &span class=&k&&new&/span& &span class=&n&&BufferedReader&/span&&span class=&o&&(&/span&&span class=&n&&reader&/span&&span class=&o&&);&/span&
&span class=&n&&String&/span& &span class=&n&&result&/span& &span class=&o&&=&/span& &span class=&n&&bufferedReader&/span&&span class=&o&&.&/span&&span class=&na&&readLine&/span&&span class=&o&&();&/span&
&span class=&k&&return&/span& &span class=&n&&result&/span&&span class=&o&&;&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&br&&h3&&strong&3.1 流程一&/strong&&/h3&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&kd&&public&/span& &span class=&kt&&void&/span& &span class=&nf&&currentMethod&/span&&span class=&o&&()&/span& &span class=&o&&{&/span&
&span class=&n&&System&/span&&span class=&o&&.&/span&&span class=&na&&out&/span&&span class=&o&&.&/span&&span class=&na&&println&/span&&span class=&o&&(&/span&&span class=&s&&&--------------------try-catch-before&&/span&&span class=&o&&);&/span&
&span class=&n&&String&/span& &span class=&n&&result&/span& &span class=&o&&=&/span& &span class=&k&&this&/span&&span class=&o&&.&/span&&span class=&na&&runtimeServerMethod&/span&&span class=&o&&(&/span&&span class=&kc&&null&/span&&span class=&o&&);&/span&
&span class=&n&&System&/span&&span class=&o&&.&/span&&span class=&na&&out&/span&&span class=&o&&.&/span&&span class=&na&&println&/span&&span class=&o&&(&/span&&span class=&s&&&--------------------result:&&/span&&span class=&o&&+&/span&&span class=&n&&result&/span&&span class=&o&&);&/span&
&span class=&n&&System&/span&&span class=&o&&.&/span&&span class=&na&&out&/span&&span class=&o&&.&/span&&span class=&na&&println&/span&&span class=&o&&(&/span&&span class=&s&&&--------------------try-catch-after&&/span&&span class=&o&&);&/span&
&span class=&o&&}&/span&
&/code&&/pre&&/div&&p&执行结果:&/p&&div class=&highlight&&&pre&&code class=&language-java&&&span&&/span&&span class=&o&&--------------------&/span&&span class=&k&&try&/span

我要回帖

更多关于 java 异常类编写 的文章

 

随机推荐