初学者刚开始编写程序,编译时错误可能会比较多,这时就需要会查看编译器给出的错误信息,根据编译器给出的错误信息修改相应代码,然后再次编译,发现问题再返回修改,如此往复,直至代码编译通过,往复编译修改代码的过程就是程序调试。
初学者写的代码,被编译时出的错误比较多,主要是对编程语言的语法不熟悉、丢三拉四、关键字拼错、大小写没有区分、括号没有成对匹配等错误。编译器一般都会在命令行窗口对这些错误给出比较确切的描述,并能指出错误所在的位置,给修改代码带来了极大的方便。下面以在Java程序开发过程一节编写的第一个Java程序“HelloWorld”为例,列举几个调试程序的实例。
示例1:编译文件名拼写错误
在命令行窗口切换到当前工作目录D盘Java目录下,如果被编译的文件在其它目录存储,将当前工作目录切换到被编译文件所在的目录。假设D盘Java目录下已存储了“HelloWorld.java”文件,如果没有“HelloWorld.java”文件,请参照前面创建的第一个Java程序,创建“HelloWorld.java”文件。
编译“HelloWorld.java”文件,在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出“找不到文件:Helloworl.java”出错信息,重新输入正确的文件名称就可以纠正该错误了。
示例2:当前工作目录下没有被编译的文件
在D盘Java目录下没有要被编译的文件“HelloWorld.java”,在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器同样给出“找不到文件:Helloworl.java”出错信息,将“HelloWorld.java”文件拷贝到D盘Java目录下,或将命令行窗口当前工作目录设置为“HelloWorld.java”文件所在的目录,就可以纠正该错误。
示例3:类声明的Java关键字拼写错误
“HelloWorld.java”文件类声明“class”关键字被错误拼写为“claas”。在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出了三个错误描述,其实都指向同一个错误。错误信息分为四个部分。错误信息构成描述见下图:
图 3-6 编译错误信息构成
第一部分指出出错的Java文件名称;
第二部分指出错误所在Java文件中的行号,“1”表示错误出现在Java文件中的第一行代码;
第三部分指出错误原因描述,读者可以根据此错误描述修改错误代码;
第四部分指出具体的错误内容,可以更好地定位错误所在具体位置。
第一个错误信息是“需要class,interface或enum”,错误信息表示的意思是类声明需要“class”、“interface”、“enum”关键字中的一个,从图中可以看出,编译器已经指出了具体错误位置所在,在第三行“claas”下面有一个向上的箭头指向该“claas”,可以明显看出,关键字“class”被错误拼写为“claas”,改正此错误,编译即可通过。
第二和第三个错误都是由第一个错误引起的。
示例4:类文件名称与类名称不一致
“HelloWorld.java”文件名称与类名称不一致,将“HelloWorld.java”文件名称重新命名为“HelloWorld1.java”,文件重命名后,导致文件名称与类名称不一致。在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出“HelloWorld”应在“HelloWorld.java”中声明,检查文件名称与类名称是否一致。
示例5:类体的花括号没有匹配
用记事本打开“HelloWorld.java”文件,去掉最后的花括号(类的匹配花括号),保存文件。
在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出语法分析时没有找到文件尾部错误信息,用记事本打开“HelloWorld.java”文件,定位到第5行,检查是否缺少与类匹配的“}”括号。
示例6:Java类库名拼写错误
用记事本打开“HelloWorld.java”文件,修改Java类库“System”为“system”,保存文件,退出记事本。
在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出程序包system不存在错误信息,用记事本打开“HelloWorld.java”文件,定位到代码第4行,检查Java类库“System”是否拼写错误,Java对字母大小写敏感,大写字母一定要大写,小写字母一定要小写。语句中的“System”不能写成“system”。
示例7:字符串没有用””引起来
Java的字符串必须用””引起来,不能是“”,也不能是’’。 用记事本打开“HelloWorld.java”文件,修改Java类库“System.out.println("HelloWorld");”为“System.out.println("HelloWorld);”,保存文件,退出记事本。
在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出未结束的字符串文字错误信息,用记事本打开“HelloWorld.java”文件,定位到代码第4行,检查字符串是否在””之内。
示例8:Java语句包含非法字符
Java语句的“;”、“.”必须是英文字符,不能写成中文字符,如把“;”写成“;”,“.”写成“。”。用记事本打开“HelloWorld.java”文件,修改代码“System.out”为“System。out”,保存文件,退出记事本。
在命令行窗口输入“javac Helloworld.java”并执行命令,编译器显示如下信息:
编译器给出非法字符的错误信息,用记事本打开“HelloWorld.java”文件,定位到代码第4行,检查是否存在把英文字符写成中文字符的情况。