1. 基础知识
- class文件可以存储在文件系统的子目录中,类路径必须与包名匹配。另外,class文件也可以存储在JAR文件中。JAR文件以zip格式组织文件和子目录。
- javac编译器总是在当前的目录中查找文件,但JVM仅在类路径中有“.”目录的时候才查看当前目录。
- JVM搜索class文件的过程:首先查看存储在jre/lib和jre/lib/ext目录下的jar文件中的class文件,若没有待查找的class文件,则在classpath的jar包和路径下搜索待查找的class文件。
- javac编译器定位源文件过程:若源文件引用了一个类而未指出该类所在的包,那么编译器将首先查找当前包,并查询所有的import指令 ,确定其中是否含有被引用的类。如果找到了一个以上的类,就会产生编译错误。
2. 常见的jar文件
- $JAVA_HOME/lib/tools.jar:tools.jar 是系统用来编译一个类的时候用到的,即执行javac的时候用到。所以javac就是对上面命令的封装,所以tools.jar 不用加到classpath里面。
javac XXX.java
// 实际上就是运行
java -classpath $JAVA_HOME/lib/tools.jar xx.xxx.Main XXX.java
$JAVA_HOME/lib/dt.jar:dt.jar是关于运行环境的类库,主要是swing的包,在用到swing时最好加上。
$JAVA_HOME/jre/lib/rt.jar:运行时库rt.jar和jre/lib与jre/lib/ext目录下的一些其他jar文件会被自动搜索,因此不需要显式地列在classpath中。