“找不到符号”错误 - 即使是一个荒谬简单的例子

时间:2011-07-21 14:20:07

标签: java compilation classpath javac symbols

所以我一直试图在几个小时内解决这个问题。我已经浏览了互联网,我已经搜索了StackOverflow,我问过一些同事(我是实习生)老实说,没有人能告诉我发生了什么!我把一个非常简单的例子放在一起向你展示我在做什么(即使用简单的例子我也得到了错误)

我有两个.java个文件。一个是Test.java,另一个是testClass.java

//testClass.java

package test;

public class testClass {
    private int someMember=0;

    public testClass(){
        //kill me now
    }

}

然后我有我的Test.java文件,其中包含我的main方法。 (虽然在我真正的问题中我没有主方法 - 它是一个带有doGet()方法的servlet)

//Test.java
package test;

public class Test {

    public static void main(String[] args) {
        testClass myTest = new testClass();
    }
}

我正在使用以下内容进行编译(从Windows命令行,使用当前目录保存我的.java文件):

..java bin location..\javac testClass.java

这非常正常,我在当前目录中获得了一个testClass.class文件。然后,我尝试使用以下内容编译Test.java文件(再次在工作目录中):

..java bin location..\javac -classpath . Test.java

这会导致以下错误:

Test.java:6: cannot find symbol
symbol : class testClass
location : class test.testClass
   testClass myTest = new testClass();
你能帮兄弟出去吗? :(

3 个答案:

答案 0 :(得分:14)

你的类在一个包中,Java将寻找假定包结构的类 - 但javac不会构建那个结构,除非你告诉它;它通常会将类文件放在Java文件旁边。

选项:

  • 将源文件放在test目录中,然后编译test\Test.javatest\testClass.java
  • 编译时指定-d .,以强制javac构建包结构。

使用IDE(Eclipse,IntelliJ等)往往会鼓励甚至强迫您将文件放在正确的目录中,并且通常也可以使构建代码更容易。

答案 1 :(得分:0)

我完成了你的所作所为

$ ls -la test/
drwxr-xr-x  6 amirraminfar  staff  204 Jul 21 10:24 .
drwxr-xr-x  3 amirraminfar  staff  102 Jul 21 10:23 ..
-rw-r--r--  1 amirraminfar  staff  148 Jul 21 10:24 Test.java
-rw-r--r--  1 amirraminfar  staff  140 Jul 21 10:24 testClass.java

然后编译

$ javac test/*

然后跑了。这一切都奏效了。所以这告诉我问题是你编译的方式。您是否尝试过同时编写这两个类?

 $ java test.Test

编辑 - 我确实把所有文件放在test/目录中,就像Jon Skeet所说的那样。也许这就是不同的东西。

答案 2 :(得分:0)

最简单的修复:创建目录test并将.java放入其中,将包含您的test - 文件夹添加到类路径中。如果您不知道该怎么做,只需将您的test - 文件夹放在java文件夹的子文件夹lib中(例如c:\ prog \ javasdk \ lib)。只需使用javac Test.java进行编译(testClass将自动编译),从任何地方使用java test.Test运行它。