怎样编译一个.java源文件,得到它的.class文件?
1,使用eclipse,一般设置的是自动编译,也就是在你ctrl + s保存的时候,eclipse就帮你自动编译成功了,你到对应的文件夹下就能找到它的.class文件。
2,使用javac命令。
在javac和java编译运行java程序,遇到了问题,如下。
package hcg.test;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
注意到源文件第一行有一条打包语句,package hcg.test。
javac Main.java命令在当前目录生成了一个Main.class文件,不过这个.class文件并不能成功运行。这样做是错误的。
原因是,java运行.class文件时,会依次搜索CLASSPATH环境变量里指定的系列路径,在这些路径下按照和包层次相同的目录结构搜索.class文件,
所以,.class文件必须放到和包层次相同的目录结构里才有效,所以该Main.class必须放到hcg\test目录下。(另外,一般CLASSPATH环境变量包含了当前路径)
在使用javac的时候,加上-d选项,指定生成的.class文件的存放路径,一般指定为当前路径(“.”表示当前路径),同时-d选项还会自动生成相应的包层次目录结构,而不加-d是不会自动生成的!!!所以,一般不要省略-d选项。
另外,注意java运行的时候,采用全限定类名!
下面要做的事情就是,把自己写好的hcg.test.Main打包,然后再引用这个包,编译、运行。
先写一个Test类引用刚才写的hcg.test.Main类。
import hcg.test.Main;
class Test {
public static void main(String[] args) {
Main m = new Main();
m.main(null);
System.out.println("This is from Test");
}
}
然后将hcg.test.Main类打包,编译和运行Test类,结果如下。
hcg是javac -d . Main生成的.class文件夹,打包成hcg.jar文件。
编译运行Test类的时候,都用-classpath选项,指定搜索了hcg.jar,不然不成功(不知道为什么在当前路径下不能通过jar包自动找到相应的依赖类)。