1

我以前从未尝试过这样做,并且有点困惑。同一个包中的两个类:

package test;

public class One {
    public static String test () { return "hello world"; }
}   

和:

package test;

public class Two {
    public static void main (String[] args) {
        System.out.println(One.test());
    }
}

如果我尝试javac Two.java test/ 目录中,我会得到 One 的“找不到符号”。但是,如果我从父目录执行此操作javac test/Two,它会编译,然后可以运行java test/Two——但又不能从内部运行(抛出NoClassDefFoundError 说明类的正确名称是test/Two, not Test)。

没什么大不了的,但好奇是否有更好的解决方法,以及是否有人可以帮助我理解这个问题。实际上,我不需要“Two”成为测试包的正式成员,我只需要将它放在同一个目录中并在那里编译即可。

4

1 回答 1

3

您需要从父目录编译:

javac test/Two.java test/One.java

(您可能还想用来-d说明您希望类文件结束的位置。请注意,您可以只编译test/One.java并让编译器找到它所依赖的类,但我发现只指定您想要的所有源代码更简洁编译。)

并使用包限定的类名运行:

java test.Two
于 2013-04-26T18:11:38.177 回答