Java语言异常处理的探讨_姜国权
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2005年第10期 信息技术 中图分类号:TP315 文献标识码:A 文章编号:1009-2552(2005)10-0109-03
Java语言异常处理的探讨
姜国权1,李亚敏1,曾立华1,宋志国2
(1.河北农业大学人工智能研究中心,保定071001;2.唐山广播电视大学,唐山063000)
摘 要:随着系统规模的不断扩大,传统的异常处理技术已经成为创建大型可维护程序的障碍了。
Java是一种面向对象的程序设计语言,Java的异常处理非常出色。
Java把异常封装到类里,运用“tr y/catch/finally”异常处理机制,最终得到的是更为“健壮”的异常处理代码。
结合开发实践,用实例说明了Java异常处理如何具体应用。
关键词:Java;异常;异常处理
Discussion on exception handling of Java
JIANG Guo-quan1,LI Ya-min1,ZENG Li-hua1,SONG Zhi-guo2
(1.Artifical Intelligence Research C enter,Agricultural University of Hebei,Baoding071001,C hina;
2.Tangshan Radio&TV University,Tangshan063000,C hina)
Abstract:With the constant enlargement of the systematic scale,traditional exception handling technology has already become the obstacle of creating large maintainable pr ogram.Java is a kind of object-oriented progra m-ming language,the exception handling of Java is very outstanding.Java packs exception in class,uses the ex-ception handling mechanism of“tr y/catch/finally”and gets more“r obust”exception handling code finally.
Combining practice of developing,this paper demonstrate how to use them by examples.
Key words:Java;exception;exception handling
0 引言
异常是在程序运行过程中发生的非正常事件。
比如:除零溢出、数组越界、内存溢出等。
这些事件的发生将阻止程序的正常运行。
为了加强程序的健壮性,程序设计时,必须考虑到可能发生的异常事件并做相应的处理。
1 传统的异常处理技术
早期的编程语言没有异常处理,它们处理错误完全是程序员的责任。
在C语言中,程序通常是通过返回一个“不合理”的值(如惯用的-1或null)来表示错误[1]。
并以此判断是不是有错误产生;在C++中,是在程序可能出现错误的地方加判断语句,看有没有错误发生并属于哪一种情况,然后按事先安排好的办法进行处理。
这种处理不仅给编程工作带来额外的负担,还破环了程序的可读性。
2 Java的异常处理
Java通过面向对象的方法来处理异常。
把各种不同的异常进行分类,并提供了良好的接口。
在一个方法的运行过程中,如果发生了异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统。
运行时系统寻找相应的代码来处理这一异常。
2.1 异常的分类及处理
Java中的Thro wable类是一个专门处理异常的类。
系统定义了两个子类:Error类和E xception类。
Error类对象是由Java虚拟机生成并抛出给系统。
通常,Java程序不对错误进行处理[2];E xception类对象是Java程序抛出和处理的对象。
它有各种不同的子类分别对应于不同类型的异常。
另外,用户根据需要可以自己定义异常类。
异常的分类及处理如图1所示。
收稿日期:2005-04-28
作者简介:姜国权(1969-),男,在读硕士研究生,研究方向为计算机网络与数据库。
—
109
—
DOI:10.13274/ ki.hdzj.2005.10.034
图1 异常的分类及处理
2.2 异常处理的方式
2.2.1 在产生异常的方法中处理异常
用tr y-catch-finally组和语句,其语法格式如下:
try
{
<语句块> //可能产生异常的代码
}
catch(ExceptionType1exceptionInstance1)
{
<语句块> //捕获并处理ExceptionT ype1对象}
catch(ExceptionType2exceptionInstance2)
{
<语句块> //捕获并处理ExceptionT ype2对象}
......
Finally
{
<语句块> //为异常处理提供统一的接口
}
2.2.2 异常的移交
Java中处理异常也可不在产生异常的方法中进行,而是用thro ws字句把它交给调用栈中上层的方法去处理。
其格式如下:
returnType methodName([paramlist])throws Ex-ceptionList
{
方法体
}
例1:异常的移交。
//File Name:Thr owsExceptionTest.java
public class ThrowsExceptionTest
{
static void arra yTest(int i)
throws ArrayIndex OutOfBoundsE xception, ArithmeticE xception //抛出异常
{
System.out.println(“When it is”+i);
if(i==0)
{
Syste m.out.println(“Ther e is no exc eption”);
return;
}
if(i==1)
{
int num[]=new int[3];
num[3]=5;
}
}
public static void main(String args[]) // main方法中处理异常
{
tr y
{
arrayTest(0);
arrayTest(1);
}
catc h(ArrayIndexOutOfBoundsException e)
{
Syste m.out.println(“Catch”+e. toString());
}
catch(ArithmeticException e)
{
System.out.println(e.toString());
}
finally
{
System.out.println(”End”);
}
}
}
2.3 自定义异常
虽然Java的Throwable类中定义了很多异常,但有时候,为了编程方便,用户还需要创建自己的异常。
下面便是一个自定义异常类的程序段:
public class MyException extends E xception
{
//类体
—
110
—
}
对于自定义的异常类,Java系统是不会自动为用户抛出属于该类的对象的[3],用户必须在程序中使用关键字throw来自行抛出异常对象。
例2:自定义异常。
//File Name:UserE xceptionTest.java
class UserException extends Exception
{
private int i;
UserException(int i)
{
this.i=i;
}
public String Test()
{
r eturn“UserException:”+i;
}
}
public class UserExceptionTest
{
static void method1(int i)
throws UserE xception //用异常的移交处理自定义异常
{
System.out.println(“When it is”+i);
if(i<5)
throw new UserE xception(i); //抛出自定义异常
System.out.println(“Without Excep-tion”);
}
public static void main(String args[])
{
tr y
{
method1(10);
method1(1);
}
catc h(UserE xc eption e)
{
Syste m.out.println(“Catch”+e. toString());
}
}
}
3 结束语
计算机语言的演变允许开发人员处理失败,Ja-va对异常处理程序的支持简化了这一任务[4]。
它提供了一种强大的异常处理机制,采用面向对象的方法进行异常处理。
异常处理的代码和“常规”代码分开,减少了代码的数量,增强了程序的可读性、稳定性、可靠性。
参考文献:
[1] Patrick Niemeyer,J onatban Knudsen.J avaT M语言入门[M].李晨
熙,石永鑫,鲁铁华译.北京:中国电力出版社,2001.11.
[2] 叶核亚,陈立.Java2程序设计实用教程[M].北京:电子工业出
版社,2003.5.
[3] 宋波,董晓梅.Java应用设计[M].北京:人民邮电出版社,2002.8.
[4] Jeff Fries en.用实例学Java2[M].钟萍,张玉峰,等译.北京:电子
工业出版社,2002.7.
责任编辑:杨立民
(上接第62页)
5 结论
本文提及的算法,结合了图像置乱和扩频算法对二值水印图像作变换,使得水印在抵抗各种噪声、滤波和压缩以及恶意攻击等方面具有很好的鲁棒性。
应用置乱技术,增加了非法信息获取者的解密难度,同时由于载体图像在嵌入水印、传输、提取的过程中都存在着损耗,利用置乱技术可以将这些损耗分散到图像的整个区域,从而使恢复后的水印图像依然具有相当好的视觉效果。
当然,相对于载体图像较小的情况,此算法则需要缩短Gold码的长度,从而对算法的鲁棒性有一定的影响,而置乱技术也增加了水印嵌入和提取的复杂度。
但是由于具有良好的鲁棒性,本方法仍然是一种很好的水印算法。
参考文献:
[1] 霍宏涛.数字图像处理[M].北京:机械工业出版社,2003.6.
[2] 刘文耀.光电图像处理[M].北京:电子工业出版社,2002.11.
[3] Marvel L M,R etter CT,Boncel et C GJ.Hiding Information in Images
[A].1998Interational Conference on Image Proces sing,Chicago,
USA,1998.
[4] Ruanaidh JJ KO,Cs urka G.A Bayes ian Approach to Spread Spectrum
Watermark Detection and Secure Copyright Protection for Di gital Image Libraries[A].IEEE Computer Society Conference on Computer Vision and Pattern R ecognition,Fort Collins,USA,1999.
[5] 周利军,周源化.基于直接序列扩频码的图像空间域水印技术
[J].软件学报,2002,13(2):298-303.
[6] Aronld V I,Avez A Ergodic.Proble ms of Clas sical Mechanic s Mathe-
matics Phys ics M onograph Series[M].New Y ork W A Benja min Inc,
1968.
责任编辑:杨立民
—
111
—。