Java虚拟机规范并没有规定虚拟机应该从哪里寻找类,因此不同的虚拟机实现可以采用不同的方法。对于从哪里加载class文件,给了足够多的自由,可以从文件系统读取和从JAR(或ZIP)压缩包中提取class文件。除此之外,也可以通过网络下载、从数据库加载,甚至是在运行中直接生成class文件,构成class文件的基本数据单位是字节
Oracle的Java虚拟机实现根据类路径(class path)来搜索类。按照搜索的先后顺序,类路径可以分为以下3个部分:
- 启动类路径(bootstrap classpath)
默认对应jre\lib
目录,Java标准库(大部分在rt.jar里)位于该路径。可以通过-Xbootclasspath
选项修改启动类路径,不过通常并不需要这样做
会按jre\lib\*
找下面所有jar包
- 扩展类路径(extension classpath)
默认对应jre\lib\ext
目录,使用Java扩展机制的类位于这个路径。
会按jre\lib\ext*
找下面所有jar包
-Xjre
指定jre目录,如果没指定,就当前目录的jre文件夹,再没有就环境变量JAVA_HOME
下的jre目录
-Xjre "D:\Java\jdk1.7.0_15\jre" java.io.File
测试
- 用户类路径(user classpath)
默认值是当前目录,也就是“.”我们自己实现的类,以及第三方类库。可以设置CLASSPATH环境变量
来修改用户类路径,但是这样做不够灵活,所以不推荐使用。更好的办法是给java命令传递-classpath(或简写为-cp)选项。-classpath/-cp
选项的优先级更高,可以覆盖CLASSPATH环境变量设置。
-classpath/-cp
选项既可以指定目录,也可以指定JAR文件或者ZIP文件
java -cp path\to\classes ... //指定目录的 直接把类全名.换/ 找下面的.class文件
java -cp path\to\lib1.jar ...//遍历下面每个class
java -cp path\to\lib2.zip ...//遍历下面每个class
java -cp classes\lib\* ... //*通配符 匹配目录下全部jar包
还可以同时指定多个,用分隔符;分开即可。
测指 指定jre目录