
2.2.3 几个初学者易犯的错误
如果你是第一次接触编程,那么开始时难免会错漏百出、磕磕绊绊。下面我们列举一些初学者容易犯的错误,看看是否有你遇到过的问题。
在讲解错误之前,我们想给大家一个温馨提示,这往往是初学者特别容易忽视的一个操作,那就是“保存”,只要修改了代码,那么一定要记得“保存”,然后输入“javac”重新进行编译,否则新修改的代码得不到体现,切记切记!
问题1:当你输入javac编译命令之后,提示“找不到文件:×××.java”,如图2-32所示。

图2-32 找不到文件:HelloWorld.java
原因:
● 路径错误。这个文件确定是在命令行的当前路径下吗?例如,HelloWorld.java文件在D:\atguigu\ JavaSE\code\chapter02目录下,但是当前命令行在D:\atguigu\JavaSE\code目录下,所以路径是错误的。
● 文件名错误。大家要拿出“找不同”的游戏技能好好对比一下文件名。
● 文件后缀名(又称为文件扩展名)错误。正确的Java源文件的文件后缀名是.java,还有一种可能是你隐藏了(不显示)文件后缀名,虽然看起来你的文件后缀名是.java,但其实它隐藏了.txt,所以一定不要隐藏文件后缀名,图2-33就隐藏了文件后缀名,现在的HelloWorld.java其实是HelloWorld.java.txt的文本文档,而不是Java文件。

图2-33 隐藏(不显示)文件后缀名
问题2:当你输入javac编译命令之后,提示“错误:需要class,interface或enum”,如图2-34所示。
原因:不小心把public或class单词写错了,或者大小写形式写错了,注意Java是严格区分大小写的。
问题3:当你输入javac编译命令之后,提示“错误:找不到符号”,如图2-35所示。

图2-34 错误:需要class,interface或enum

图2-35 错误:找不到符号
原因:单词写错了,像String、System等单词是首字母大写的,再次强调Java是严格区分大小写的。
问题4:当你输入javac编译命令之后,提示“错误:非法字符:×××”,如图2-36所示。

图2-36 错误:非法字符:×××
原因:标点符号不是在英文半角形式下输入的,你可能输入了中文全角形式的标点符号。提醒大家,Java中的所有标点符号,包括大括号、中括号、小括号、分号、双引号、单引号、加号等,都必须在英文半角形式下输入。错误和正确的输入法状态图如图2-37所示。在计算机的世界里,英文状态的标点符号和中文状态的标点符号,全角标点符号和半角标点符号是用不同的字符表示的。初学者特别容易犯单词拼写和标点符号的错误。因为初学者一开始还不适应这么严谨的语法要求,它和平时的聊天内容是很不一样的。
问题5:当你输入javac编译命令之后,提示“错误:需要’;’”,如图2-38所示。

图2-37 错误和正确的输入法状态图

图2-38 错误:需要’;’
原因:Java中的一个语句结束了,需要用分号结尾。System.out.println是Java的一个输出语句,它的最后需要用分号结尾。这里System中的S要大写,并且println后面的小括号中不能缺内容,小括号中的内容就表示要在命令行控制台中输出的内容。
问题6:当你输入javac编译命令之后,提示“错误:解析时已到达文件结尾”,如图2-39所示。

图2-39 错误:解析时已到达文件结尾
原因:缺少右大括号,Java中的大括号必须是成对的,而且要括对位置。大家可以仔细查看一下Java的类和方法都是由大括号括起来的完整结构。在编写代码时,注意缩进格式可以降低这种错误出现的频率,也方便查找这种错误。正确的代码结构示意图如图2-40所示。

图2-40 正确的代码结构示意图
问题7:当你输入javac编译命令之后,系统提示“错误:类××是公共的,应在名为××.java的文件中声明”,如图2-41所示。

图2-41 错误:类××是公共的,应在名为××.java的文件中声明
原因:如果你在class前面写了public,那么class后面的类名与.java文件的文件名必须一致,包括大小写形式。关于public的详细使用说明,在第7章会进行讲解。
问题8:当你输入了javac编译命令后,提示“错误:需要<标识符>”,如图2-42所示。

图2-42 错误:需要<标识符>
原因:你把语句写到了main方法的外面。Java代码的结构必须是如下所示格式。

问题9:当你的编译没报错,但是在运行时提示“错误:在类HeeloWorld中找不到main方法”,如图2-43所示。

图2-43 错误:在类HelloWorld中找不到main方法
原因:main方法写错了或没写,main的规范格式必须是如下格式。

问题10:当你的编译没报错,但是在运行时提示“错误:找不到或无法加载主类×××”,如图2-44所示。

图2-44 错误:找不到或无法加载主类×××
原因:java命令后面的类名写错了,java命令的正确格式如下所示。

类名就是class后面的单词,也是编译后.class文件的文件名。我们在java命令后面写类名时,不用加文件后缀名,但必须把类名写对。
以上几个问题几乎涵盖了所有初学者容易犯的错误。也许有些初学者会觉得这也太难了,这么多“坑”在等着我,但其实只要你稍微细心和耐心一点,再反复练习几次,这些错误很快你就不会再犯了。