1

我在java中有这些程序:

//file ../src/com/scjaexam/tutorial/GreetingsUniverse.java
package com.scjaexam.tutorial;
public class GreetingsUniverse {
    public static void main(String[] args) {
        System.out.println("Greetings, Universe!");
        Earth e = new Earth();
    }
}

//file ../src/com/scjaexam/tutorial/planets/Earth.java
package com.scjaexam.tutorial.planets;    
public class Earth {
    public Earth() {
        System.out.println("Hello from Earth!");
    }
}

我能够毫无错误地编译第二个使用:

javac -d classes src/com/scjaexam/tutorial/planets/Earth.java

这会将编译Earth.class后的../classes/com/scjaexam/tutorial/planets/文件按预期放入文件夹中。现在我必须编译主类GreetingsUniverse.java,但是这个命令失败了:

javac -d classes -cp classes src/com/scjaexam/tutorial/GreetingsUniverse.java

src/com/scjaexam/tutorial/GreetingsUniverse.java:7: error: cannot find symbol
        Earth e = new Earth();
        ^
  symbol:   class Earth
  location: class GreetingsUniverse
src/com/scjaexam/tutorial/GreetingsUniverse.java:7: error: cannot find symbol
        Earth e = new Earth();
                      ^
  symbol:   class Earth
  location: class GreetingsUniverse

编译(然后运行)这个程序的正确命令是什么?

4

3 回答 3

2

你还没有导入Earth类,所以编译器不知道Earth指的是什么。您应该在GreeingsUniverse.java文件的开头有这一行:

import com.scjaexam.tutorial.planets.Earth;
于 2013-10-09T14:02:09.263 回答
1

您需要导入Earth

package com.scjaexam.tutorial;

import com.scjaexam.tutorial.planets.Earth;

public class GreetingsUniverse {
    public static void main(String[] args) {
        System.out.println("Greetings, Universe!");
        Earth e = new Earth();
    }
}

当编译器说"cannot find symbol: class Earth"时,它指的是您没有导入的类。确保在类声明之前包含您在类中使用的所有包。

于 2013-10-09T14:02:10.170 回答
1

您正在尝试创建 Earth 对象的一个​​实例,但是它位于一个单独的包中,这意味着它找不到它。您需要使用以下方法在 GreetingsUniverse 类中导入 Earth 类:

import com.scjaexam.tutorial.planets.Earth;  
于 2013-10-09T14:04:14.617 回答