classpath:即Java进程寻找资源的路径。
简而言之,Java进程在寻找资源的时候会从classpath中的路径去搜索。
在我看来classpath不应该是一个静态的概念,应该由进程的角度去理解。
每一个JVM进程都有自己的classpath参数。
我们可以通过运行时来设置,如 java -classpath "路径" "xxx"
回头来思考一个问题,用IDE运行Java程序和命令行下执行java 命令运行Java程序会有什么区别呢?
其实是一样的,IDE运行Java程序也是通过调用java命令,这点与命令行是一样的。
区别在于IDE会设置一些JVM参数而已。
那我们怎么去查看一个JVM进程的classpath参数呢?
下面有一个小Demo
import java.io.FileWriter;
import java.util.Enumeration;
import java.util.Properties;
public class Test1{
public static void main(String[] args) throws Exception{
Properties ps = System.getProperties();
Enumeration e = ps.propertyNames();
while(e.hasMoreElements()){
String key = (String)e.nextElement();
if(key.equals("java.class.path")){
System.out.println(key+"="+ps.getProperty(key));
}
}
}
}
今天之前,我一直有个误解。
认为所有的类加载的时候都是依靠classpath。
但是,通过实验和探讨我发现不是这样的。JRE自身提供的一些class就不用classpath来设定。
classpath只需配置用户环境下所需的class。
虚拟机自身所需要的class,不需要classpath来设定。
sun.boot.class.path参数中会包含JRE所需的class。
java.class.path参数与我们系统中环境变量CLASSPATH是一致的(如果你不自己设置,如java -classpath)。
sun.boot.class.path参数不需要我们配置,JVM可以自动扫描出合适的。