JAVA新人常犯错误集锦

简介:

      学习程序设计,最怕的事情可能就是遇到错误却找不到错在哪里。这里列举一下笔者发现的JAVA新人常犯的错误,供目前正在上笔者JAVA课程的学生参考,其他JAVA初学者亦可借鉴。

1、源程序文件后缀名名义上是.java而实际上是.txt

      JAVA要求源程序文件的后缀名为.java。也许是为了防止用户不小心更改了文件的后缀名,Windows默认情况下是隐藏后缀名的,这就为初学者犯错埋下了隐患。此时,我们创建一个文本文件,然后把它的“后缀名”改为.java,如下图所示:

121519355.png

      表面上看,它的文件全名是HelloWorld.java,然而当你编译时却报“找不到文件”的错误,如下图所示:

141844485.png

      运行dir命令,显示当前目录下的所有目录和文件,这个文件就会露出它的庐山真面目。如下图所示:


142033253.png

      可以看出,它的后缀名仍然是.txt。Windows隐藏了文件的后缀名,所以当我们把文件更名为HelloWorld.java时,并没有改掉它的后缀名,.java只是文件名的一部分,并非为后缀名。

      解决办法是不要让Windows隐藏文件的后缀名。打开“我的电脑”,点击顶部菜单栏的“工具”->“文件夹选项”,打开“文件夹选项”对话框,点击“查看”标签,在“高级设置”中,清除掉“隐藏已知文件类型的扩展名”前面的勾选。如下图所示:

143553778.png

      确定后,我们就可以在Windows下清楚地看到文件“HelloWorld.java”的真实面目了。如下图所示:

144128949.png

2、没有区分中英文

      在JAVA语言中(实际上其他语言诸如C也一样),起特殊作用的分号“;”、括号(包括圆括号“()”、中括号“[]”、大括号“{}”),以及双引号“""”、单引号等,都必须是英文的。若不小心输入为中文的,就会报语法错误。此类错误对于初学者来说非常隐蔽,常会耗费大量的时间和耐心。以分号为例,可采用如下方法检测是不是误写为中文的了:按快捷键Ctrl+F,可打开搜索对话框,输入中文的分号,让它搜索,看搜索到的分号是不是应该写为英文的。为保证能对整个程序文件进行搜索,可在搜索前预先把光标移动到程序的开始处。因为搜索默认情况下是从当前光标处搜索到文件尾,光标之前的内容不会搜索到。或者使用某些搜索选项,让它搜索完整个文件。分别以EditPlus和Windows的记事本编辑器示例如下:

      Editplus,确认选中红框中的选项。

133219268.png

      记事本:如下图,默认向下搜索。向下搜索完后,再点击“向上”,让它向上搜索。

133256429.png

3、括号、引号等不配对

      在程序中,圆括号(())、方括号([])、大括号({})以及双引号("")和单引号必须成对出现,否则报错。如以下的的错误“进行语法解析时已到达文件结尾”,即是因为少了一个右大括号。为避免发生此类错误,可先把左右括号/引号写好,然后再往里面添加代码。

4、缺少大括号

   对于if/else和循环,若只需执行一条语句,可以不用大括号。但是当需要添加语句时,就需要用大括号把多条语句包含起来。这一点容易被忽略,而一旦被忽略,就是逻辑错误(程序能运行,但结果不对)。排查逻辑错误要比语法错误困难很多,因为编译器不会报错,所以常常会耗费大量时间和耐心。因此,为避免这类错误,应养成习惯:即使只执行一条语句,也应用大括号包含。

5、类名/变量名写错或没有区分大小写

    类名应保证正确,变量定义后,再使用此变量也应该保证与定义时的名字一致。更容易出错的是,JAVA是区分大小写的语言,有人把String写成string,或者同一个变量名,前后使用时大小写不一致,都会报错。因此,当编译器报“找不到符号”的错误时,就应该根据编译器的错误提示信息仔细检查相关类名/变量名是不是这两方面犯了错。例如,下图的错误分别是把类String写成了string,以及定义了变量scan,但使用此变量时却写成了sscan。

133409492.png

6、公共类名应与文件名同名

      我们一般写的类都是公共的(public),JAVA要求保存公共类的文件的文件名必须与类同名,而且要注意大小写。否则会报错:类XX是公共的,应在名为XX.java的文件中声明。这里的“XX”指代某个类名,以下亦然。

7、修改后未保存或未重新编译

      发现错误更改后未保存,这时修改并未生效,因此应该首先保存。保存后还应重新编译生成新的字节码文件(.class)文件,因为真正运行的是字节码文件。不重新编译的话,运行的还是旧的字节码文件。

8、错误:仅当显式请求注释处理时才接受类名称“XX.JAVA”

      这个错误是前一段时间批改学生程序时遇到的,程序本身没有发现任何问题,只是文件名写成了XX.JAVA,一时我也不知道错在哪里。后来把文件后缀名.JAVA改为.java,就好了。由于笔者写程序时一直把后缀名写为.java,因此一直未遇到这种问题(或者遇到了,但是忘记了)。看到大写的后缀名后,潜意识里认为后缀名属于Windows的概念,而Windows是不区分大小写的,因此也未在意。但我当时显然忽略了一点,当我们用javac命令编译程序时,javac是JAVA的东西,它对于将要编译的文件的文件名,是区分大小写的。因此,文件名XX.JAVA与XX.java对它来说,是不一样的。正如上面的第三条所讲,公共类名应与文件名同名,而且要注意大小写。而如果我们把javac写成JAVAC,则没有问题。因为javac命令是Windows帮我们调用的,它不区分大小写。

9、设置classpath环境变量时忘了添加当前目录

      在不使用IDE的情况下,若要引用第三方jar包,需把这些jar包引入到classpath环境变量中。但若设置classpath时,没有包含当前目录(.),那么即使是在字节码文件所在的目录使用java命令运行此字节码文件,也会报java.lang.NoClassDefFoundError。这是因为若不设置classpath,则classpath自动包含当前目录;而若设置后,则不再自动包含当前目录,需要我们显式指定包含,这一点与path环境变量不同。

10、方法调用没有参数时遗漏了圆括号

      与C一样,JAVA中调用方法,即使没有参数,也应带上圆括号。犯这种错误,说明基础知识不牢固。

11、import语句位置不对

      例如以下程序:

 
 
  1. import java.text.DecimalFormat;  

  2. class A  

  3. {  

  4. }  

  5. import java.util.Scanner;  

  6. class B  

  7. {  

      则会报第7行出错:“需要为 class、 interface或enum”。这是因为import语句应写在类定义之前,不能在两个类的定义之间出现import语句。因此,上述程序应修改如下:

 
 
  1. import java.text.DecimalFormat;  

  2. import java.util.Scanner;  

  3. class A  

  4. {  

  5. }  

  6. class B  

  7. {  

      为避免此类错误,建议每个类写在单独的文件中。

      (发现其他问题,将继续更新)










本文转自 NashMaster2011 51CTO博客,原文链接:http://blog.51cto.com/legend2011/1057901,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
机器学习/深度学习 Java API
杨校老师课堂之Java面向对象知识点整理集锦3
杨校老师课堂之Java面向对象知识点整理集锦
12 0
|
1月前
|
Java API 数据安全/隐私保护
杨校老师课堂之Java面向对象知识点整理集锦2
杨校老师课堂之Java面向对象知识点整理集锦
17 0
|
1月前
|
Java 编译器 开发工具
杨校老师课堂之Java面向对象知识点整理集锦1
杨校老师课堂之Java面向对象知识点整理集锦
11 0
|
1月前
|
存储 安全 Java
Java面试集锦
Java面试集锦
14 0
|
2月前
|
消息中间件 NoSQL Java
2024年高频Java面试题集锦(含答案),让你的面试之路畅通无阻!
或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信你一定不会“败”的很惨,因为有了它,足以应对目前市面上绝大部分的 Java 面试了,因为这篇文章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了。
|
2月前
|
移动开发 前端开发 JavaScript
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
Java和web前端,IT新人该如何选择?,2024年最新Web前端内存优化面试
|
分布式计算 Java 测试技术
《Java单元测试实战》——案例集锦:Java单元测试典型案例集锦(5)
《Java单元测试实战》——案例集锦:Java单元测试典型案例集锦(5)
208 0
|
Java
[java]网上商城错误集锦
[java]网上商城错误集锦
71 0
|
负载均衡 Java 测试技术
《Java单元测试实战》——案例集锦:Java单元测试典型案例集锦(1)
《Java单元测试实战》——案例集锦:Java单元测试典型案例集锦(1)
206 0
|
负载均衡 Java 测试技术
《Java单元测试实战》——案例集锦:Java单元测试典型案例集锦(2)
《Java单元测试实战》——案例集锦:Java单元测试典型案例集锦(2)
139 0