Java语言中的常见错误

时间:2022-04-07 11:47:37

Java语言中的常见错误

摘要: 本文主要讲述了在编写Java程序的过程中常见的几种错误。

Abstract: This paper mainly presented common errors in Java programming.

关键词: Java;异常;编译;运行;逻辑

Key words: Java;abnormal;compiler;operation;logic

中图分类号:TP39 文献标识码:A文章编号:1006-4311(2012)15-0176-01

0引言

Java语言虽然功能强大,使用方便、灵活,但是要学好、用好Java语言并不容易。对于初学者,往往出了错误还不知道是怎么回事,还有一些学习过其他高级语言编程的读者,经常按照原有的习惯来编写Java程序,这也是造成错误的一个原因。在Java语言中,产生异常现象的错误大体可以分成3类:编译错误、运行错误和逻辑错误。

1编译错误

它是指在编写程序时,输入错误的关键字或者标识符、遗漏标点符号及赋值时数据类型不匹配等错误。

大小写字母混淆:Java语言是严格区分大小写的计算机编程语言。类、方法、变量的名称必须前后完全一致,否则将出现无法解析符号的错误。

使用末声明的变量:在有些高级语言中,变量不需要声明,就可以直接使用。而Java语言规定在使用任何变量前必须先声明该变量的类型。如果使用末声明的变量,编译程序时会出现无法解析符号的错误。(cannot resolve symbol)

使用末初始化的变量:虽然声明了变量,但是在末赋初值前就进行计算或者打印输出等非赋值操作。这种情况下,会显示变量可能末被初始化的错误提示信息(might mot have been initialized)。

语句后面遗漏分号:Java语言规定每条语句的末尾必须有分号,也就是说分号是两条语句之间的分隔点。如果某条语句的分号没有输入,则程序编译时就会出现错误。在一般情况下,错误提示会正确指出程序中缺少分号的位置。但是如果语句比较复杂,错误提示指出的位置可能并不是实际缺少分号的位置,编程者必须仔细查看程序,自行找出错误的位置。

数据类型与变量类型不符:当数据类型与变量类型不符时,如果Java语言可以自行转换的话,则不会给出错误信息,但是运行结果将很可能与编程者意愿不符。如果Java语言不可以自行转换的话,则会显示错误。

小括号不配对:小括号左右个数不等的现象经常出现在if 语句和while语句的条件表达式中。当表达式结构复杂,必须使用多层小括号时,很容易出现这类错误。因此,建议编程者养成先输入一对小括号,然后再在其中输入内容的好习惯。

2运行错误

它是指在Java程序执行时因非法操作或者操作失败等产生的错误。这些错误在编译时一般是无法发现的,产生运行错误时,程序会被中断,并显示错误信息。下面列出常见的运行错误。

数组下标越界是初学者常犯的一个错误。Java语言规定数组的下标由0开始到数组元素个数减1为止。(java.long.ArrayIndexOutOfBounds Exception)

除数为零:Java语言不允许计算过程中出现除数为零的情况,因此,在编写程序时,一定要注意计算过程中的中间值。如果出现除数为零的情况,则程序会被中断并显示除数为0的错误信息。(ArithmeticException:/by zero)

运行错误通常比较隐蔽,而且会造成程序中断甚至系统死机等现象。为此Java语言提供处理这类错误的方法,帮助编程者避免程序中断等现象的发生。

3逻辑错误

程序运行后,没有得到预期的结果,这说明程序存在逻辑错误。这类错误从语法上来说是有效的,只是程序逻辑上存在缺陷。例如,使用的变量类型不正确、语句次序错误、循环变量的初值和终值不正确等。通常,逻辑错误不会产生错误提示信息,所以错误较难排除,需要编程者仔细地分析整个程序的运行步骤。

超出数据类型的数值范围:在Java语言中,每种数据类型都有其数值范围,一旦数据超出了数据类型的取值范围,就会造成计算结果的错误。

将等于关系符号写成“=”,在许多高级语言和数据表达式中,用“=”符号来表示相等的关系,而在Java语言中,该符号是赋值运算符号,“==”才是关系运算符号。在一般情况下,只要比较的数据类型不是boolean类型,Java语言可以在编译程序的时候发现该错误,但是如果进行比较的两个数据通信的类型本身就是boolean类型,Java语言可以在编译程序的时候发现该错误,但是如果进行比较的两个数据的类型本身就是boolean类型,则很难发现该错误,最终造成程序出现逻辑错误。

例如:

Boolean boo=false;

if(boo=true)System.out.println(“yes”);

在上面的if语句中表达式,Java语言编译系统将boo=true作为赋值表达式进行处理,也就是说先将true赋值给变量boo,然后再判断boo的值是否为true,如果为true,则执行打印语句,否则继续执行下面的语句。很显然,无论变量boo之前的值是什么,该表达式的值永远是true,所以打印语句一定会被执行。

这种错误在编译时是检查不出来的,但运行结果往往是错的。而且由于习惯的影响,编程者自己也很难发现。

语句体忘记加大括号:大括号在Java程序中具有非常重要的位置,当语句体的语句不止一条时,必须使用大括号,否则很容易出现错误。例如:下面的语句本意是要计算1+2+3+…+100的和,但是因为忘记了使用大括号将语句体括起来,所以实际上只是重复执行了sum=sum+i;语句而且进入了死循环状态。

int sum=0,i=1;

while(i

sum=sum+I;

i++;

为了避免这类错误的发生,最好在任何情况下都使用大括号将语句体括起来。

参考文献:

[1]王洪香,郭潭玉.Java程序设计案例教程.北京交通大学出版社,2007.

[2]沈大林.Java程序设计案例教程.中国铁道出版社,2007.

[3]王薇.Java程序设计与实践教程.清华大学出版社,2011.

上一篇:关于微机保护监控系统通讯规约的应用分析 下一篇:混沌同步在保密通信中的研究