JAVA基础:Java语言的违例控制简析

文章作者 100test 发表时间 2007:03:14 17:34:13
来源 100Test.Com百考试题网


前言

本文主要讨论Java中的违例控制,包括以下内容:

1)什么是违例控制

2)违例的概念

3)Java中违例的类层次结构

4)如何掷出和捕获违例

5)捕获以后如何处理违例

本文将通过深入以上细节,向你完整地展现Java中违例的全貌,使得你能够在以后的程序编写中得心应手地处理各种可能遭遇的情况。

什么是违例控制
简单地说,违例控制就是在程序中提供给你这样一种能力:

1)监视程序中的异常情况

2)当异常情况发生时,将控制权交给你自己编写的违例控制代码

违例控制的流程
在Java中,这些工作由以下关键字来完成:try,catch,throw,throws,finally,他们的基本代码结构如下:

try
{
//代码块
}
catch(ExceptionType e)
{
//此违例类型的控制代码
}finally
{
//清除回收等工作
}

首先执行try中包含的代码块,如果遇到执行错误,程序掷出(throw)一特定类型的违例,你捕捉到此违例并转而执行catch中的违例控制代码。最后,无论程序是否产生违例都必须执行finally中的代码,其主要为一些变量清除、资源回收(1)等工作。
首先让我们来看看Throwable类,Sun是这样来描述它的:

The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause.

Instances of two subclasses,Error and Exception,are conventionally used to indicate that exceptional situations have occurred. Typically, these instances are freshly created in the context of the exceptional situation so as to include relevant information (such as stack trace data).

从中我们可以看出:

1)在Java中,违例对象必然是从Throwable中衍生出来的一个类的实例。

2) Throwable包含两个直接子类Error(错误)和Exception(违例)。

3)我们可以创建自己的违例类,只要它是从Throwable或其子类中衍生出来即可(确切地讲应该是从Exception或其子类中衍生出来,本文不准备详细讨论如何创建自己的违例类,你可以参考相关的资料)。

Error类和Exception类
Error表示那些由于异常情况引起的严重错误,我们不应去捕获这类对象,它主要包括系统内部错误以及资源耗尽等情况。而Exception类表示那些你必须去捕捉并处理的情况。

检查违例(Checked Exceptions)和不检查违例(Unchecked Exceptions)
在Exception的子类中有一个非常重要的类:RuntimeException(2)。Java中将自它或者它的子类衍生出来的任何违例都称作“不检查违例”(Unchecked Exceptions),自其他Exception子类衍生出来的违例都称作“检查违例”(Checked Exceptions)(3)。

不检查违例包括的问题主要有:造型错误,数组越界存取,空指针访问等,这些问题一般来说都是你程序编写的问题。简单地说,不检查违例就是那些由编译器来检查而无需你程序中控制的违例。而检查违例是指那些你必须处理的违例,否则编译时会产生一个编译错误。你可以选择下面任意一种方法来处理它:

1)捕获违例:在try代码块后面紧跟catch处理代码块

2)声明违例:在方法签名中用throws来通告可能会产生违例

Throwable类的构造器和方法
上面我们已经提到throwable是所有违例的超类,在这里我们就来分析一下它。Throwable类有四个构造器方法:

Throwable()

Throwable(String message)

Throwable(String message,Throwable cause)

Throwable(Throwable cause)

后两个是在JDK1.4中新出现的方法,用来支持所谓的链式违例(chained exception)机制(4)。接着,我们来看看throwable的一些主要方法:

fillInStackTrace()

getStackTrace()

printStackTrace()

setStackTrace(StackTraceElement[] stackTrace)

这四个方法是用来处理StackTrace的,如果你对StackTrace不是很熟悉,你可以这样理解它:就是当程序由于运行时错误终止时你在屏幕上看到的那些东西。

getLocalizedMessage()

getMessage()

这两个方法提供了访问封装在违例对象里的消息的接口。

toString()

Throwable重载了Object类的toString方法,用来返回一个Throwable的简短描述。

所有的违例对象都继承了throwable类的以上方法,所以你可以在catch代码块中调用其中任意一个方法,比如你可以使用getMessage方法来显示违例的详细信息。



相关文章


JAVA题库:格林模拟试题二(上)(6)
【Java入门】如何掌握Java(J2EE篇)
Java入门:代码的坏味道
Java路径问题最终解决方案
JAVA基础:Java语言的违例控制简析
Java认证模拟题及分析2
Java认证模拟题及分析1
敏捷开发技巧:以用户故事管理项目二
花二十分钟教你Ruby快速入门(三)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛