常见编译和解释错误
如果你在编译Java源代码或运行应用程序时遇到问题,本页的内容
可能会帮助你。如果还不能解决问题,可以参看你使用的编译器或
解释器的文档。
编译问题
Can't Locate the Compiler
在UNIX系统中,如果路径设得不对,可能看到以下的错误信息:
javac: Command not found
用setenv或类似的命令修改PATH环境变量,把Java编译器的目录包含
进去。
Syntax Errors
如果程序中的某些部分输入错误,编译器会产生一个语法错误消
息。这个消息通常显示错误的类型、发生错误的行号、错误行的代
码和代码中错误的位置。下面是一个在句末丢失分号的错误:
testing.java:14: `;' expected.
System.out.println("Input has " +
count + " chars.")
^
1 error
有时编译器不能理解你的意图,打印出令人迷惑的错误信息或者很
多行错误信息。例如,下面的代码片段取消了一个分号:
while (System.in.read() != -1)
count++
System.out.println("Input has " +
count + " chars.");
当处理这个代码时,编译器发布两条错误信息:
testing.java:13: Invalid type expression.
count++
^
testing.java:14: Invalid declaration.
System.out.println("Input has " + count + " chars.");
^
2 errors
编译器发布两个错误信息,因为在处理count++后,编译器的状
态指出它在表达式的中间。没有分号,编译器无法知道这个句
子结束了。
如果发现编译器错误,那么你的程序就不会被成功编译,也不
产生.clsss文件。仔细检查这个程序,修正错误,然后再试。
Semantic Errors
除了验证程序在语句构成上是正确的,编译器还检查其它基本的
错误。例如,编译器在你使用一个没有被初始化的变量时会警
告你:
testing.java:13: Variable count may
not have been initialized.
count++
^
testing.java:14: Variable count may not have been initialized.
System.out.println("Input has " + count + " chars.");
^
2 errors
解释器问题
Can't Find Class
使用UNIX或Windows 95/NT JDK的Java初学者的一个常见错误是
试图编译编译器产生的.class文件。例如,如果你试图解
释HelloWorldApp.class,而不是类HelloWorldApp,解释器显
示如下错误信息:
Can't find class HelloWorldApp.class
Java解释器的参数是类名,而不是文件名。
The main Method Is Not Defined
Java解释器要求你执行的类有一个称为main的方法,因为解释
器必须有一个开始执行Java应用程序的地方。
如果试图运行一个没有main方法的类,解释器将显示如下错误
信息:
In class classname: void main(String
argv[])
is not defined
这里,classname是你试图运行的类名。
Changes to My Program Didn't Take
Effect
有时当你在编辑/调试/运行的循环中,好象你对程序的改变不
起作用- 例如,一个print语句不打印。这在MacOS上使用Java
Runner运行Java应用程序时很常见。如果重新编译.class文
件,必须停止Java Runner,然后重新运行,因为Java Runner不
会重新装载类。