摘 要:Java语言之所以被广大编程爱好者喜爱青睐,就是因为Java中带有一种强大的异常处理机制,它能利用面向对象的方法,把异常处理固化到语言中,按照创建、抛出、捕获等过程处理异常,这样才使Java语言的可读性和运行效率大幅度提高。
关键词:异常;抛出;捕获;Java
在程序运行过程中发生的、会打断程序正常执行的事件称为异常(Exception),也称为例外。比如:除零溢出、数组越界、内存溢出等,这些事件的发生将阻止程序的正常运行。传统的编程语言没有异常处理机制,处理错误完全依靠程序编写者自己查找,通常是遇到错误返回一个特殊的值或者设定一个标志,并以此判断是否有错误产生,这就给程序维护带来了很大的障碍。而Java利用面向对象的方法,把异常处理固化到语言中,并把各种不同的异常分类,同时提供了良好的接口,由于Java语言中的异常处理和Java运行时的系统相关,所以它消耗内存和处理器来处理创建、抛出、捕获、处理异常等事件,如果不能合理使用就会适得其反,降低了软件的可读性和执行效率。
1.异常类的层次
Java的所有异常类都是系统类Throwable的子类,Java中出现的异常都是Throwable类或其子类的一个实例对象。Throwable类有两个子类:和ion类,即错误和异常类。如由Error类派生的异常属于Java内部错误,程序无法对其进行控制,由虚拟机抛出。异常是可以由Java抛出并处理的事件。Exception类有一个重要的子类,RuntimeException类,Java中把该类和其子类称为运行时异常,运行时异常自动为Java程序定义。
2.异常的处理模型
Java 的异常处理模型基于三种操作:声明异常、抛出异常、捕获异常。
声明异常:
每一个方法都必须说明它可能抛出的必检异常的类型,这称为声明异常。系统错误和运行错误对任何代码都可能发生,因此Java不要求在方法声明中显示地声明Error和RuntimeException。然而,如果方法要抛出其他异常,必须在方法声明中显示地说明它们,以便通知方法的调用者。在方法中使用关键字throws可以声明一个或多个异常,多个异常之间用逗号分隔,如下所示:
Public void method()throws Exception1,Exception2,Exception3… ,ExceptionN
抛出异常:
程序检查到一个错误后,创建一个适当类型异常的实例并抛出它,这就称为抛出异常。在方法中使用关键字throw抛出异常,可以使用下面的方法抛出异常:
Throw new exception
捕获异常:
当异常抛出时,可以在try-catch块中捕获并处理它,如下所示:
try{
…}
catch{
…}
… catch{
…}
如果在执行try 子句的过程中没有出现异常,则跳过catch子句。如果try块中的某条语句抛出一个异常,Java就会跳过try块中剩下的语句,开始为该异常搜索处理代码。处理异常的代码称为异常处理器,从当前的方法开始,通过方法调用链向后搜索,查找处理代码。从第一个到最后一个逐个检查catch子句,看是否有某个catch子句中的异常类实例与该异常的类型匹配。如果有,就将该异常对象赋值给所声明的变量,执行catch子句中的代码。如果没有发现异常处理器,Java就退出这个方法,把异常传递给调用该方法的方法,继续同样的过程来查找处理器。如果在调用的方法链中找不到相应的处理器,程序终止并在监视器上输出错误信息。寻找处理器的整个过程称为捕获异常。
3.异常处理方法
Java语言提供了3种处理异常的方法:一种方法是使用try-catch-finally 语句实现异常处理;另一种方法是使用throw语句在方法头或者方法体内抛出异常,异常处理代码捕获这些异常。Java语言还为用户提供了定义自己异常类的方法,来满足用户处理实际问题的需要。
在使用try-catch-finally语句实现异常处理时,由于一个try子句可能产生多种不同的异常,这就需要多个catch子句来实现多异常处理机制,每一个catch子句接收和处理一个异常句柄,而针对多个catch子句,处理的原则是:
1)在多catch子句中,处理的顺序是由距离产生异常最近的、可匹配的catch代码段来处理。所谓的匹配是指catch所处理的异常类型与所生成的生成类型完全一致或是它的父类。
2)如果没有相应的异常处理,说明当前方法不能处理该异常,程序流程将会交给上层方法的try代码段进行处理,如果均不符合,则由Java虚拟机捕获并处理该异常。
3)异常处理的查找依据类型(异常与参数属于相同的异常类、异常属于参数异常的子类)匹配原则按顺序进行。在使用throw语句抛出异常时,对于含有throw语句的方法,应该在方法头定义中增加语句: throws异常类名列表,这样做的目的,主要是提醒调用该方法的其他方法,要处理和接受该方法在运行过程中可能抛出的异常。
Java 语言也提供了用户自定义异常类的方法来满足处理方面的需求, 而所有用户自定义的异常类都必须是Throwable类或Exception类的子类。
程序运行中有错误是可以预料的,但却是不可避免的。当程序出现错误时,要力争允许用户排除环境错误,继续运行程序,这就是异常处理的任务和准则。Java语言提供了异常处理的内部支持,需要广大用户通过日常的反复操作来体会其更深层次的内容。
参考文献:
[1] 杨华中,贾耀炜.Java语言与程序设计[M].北京:人民邮电出版社.1997.
[2] 叶核亚,陈立.Java程序设计实用教程[M].北京:电子工业出版社,2003.5.
[3] 宋波,董晓梅.Java应用设计[M].北京:人民邮电出版社,2002.8.
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。