如何编译和运行以下程序:
Test1.java:
package A;
public class Test1
{
public int a = 1;
}
Test2.java:
package B;
import A.*;
public class Test2
{
public static void main(String [] args)
{
Test1 obj = new Test1();
System.out.println(obj.a);
}
}
我是新手包。
如果我使用javac *.java
进行编译
并手动创建目录A,将Test1.class复制到其中并手动创建目录B并将Test2.class复制到其中,然后运行java B.Test2
它可以工作。我确信这不是正确的做法。请建议。
答案 0 :(得分:2)
您应该将.java文件保存在与您的包结构相匹配的目录结构中
所以Test1.java应该进入目录A. 所以Test2.java应该进入目录B
答案 1 :(得分:2)
您需要将java文件保存在正确的目录结构中:
A/Test1.java
B/Test2.java
通常只需在主类上调用javac
即可,因为所有依赖项都将自动处理。在我说javac B/Test2.java
后,它看起来像这样:
A/Test1.class
A/Test1.java
B/Test2.class
B/Test2.java
我可以使用java B.Test2
运行程序。
如果仅仅在主类上运行javac
是不够的,那么您可能需要构建系统。
答案 2 :(得分:2)
编译方式没有任何问题,这只是麻烦但肯定没有错。
话虽这么说,创建一个src目录来存储.java文件,使您的目录结构与类的包结构保持一致。在这种情况下,您将拥有src目录,并在其中,目录A和目录B.内部A放置Test1.java,内部B放置Test2.java
然后:
javac B/Test2.java
为什么选择Test2.java?因为它依赖于A,所以编译器足够聪明,首先编译A / Test1.java然后编译B / Test2.java。此时,您在A和B中有每个.class文件
运行它:
java B.Test2
答案 3 :(得分:0)
编译器将创建名为A和B的目录,并将.class文件放在其中。
您不需要手动将类文件复制到它们的包目录中,如果这样做,它可能不会起作用。
答案 4 :(得分:0)
这不是您问题的直接答案,但您可能想开始考虑使用IDE(其他人建议使用ant)。如果你刚刚开始,我会推荐jcreator,如果你想要一些好东西,我会推荐Eclipse。