classpath的作用:
告诉jvm启动时的系统类加载器去哪里加载类,加载哪些类。
不配classpath的时候,默认加载输入java命令的那个目录。
前提知识,三大加载器:
启动类加载器:由jvm直接管理,开发人员无法获取该加载器的引用,是扩展类加载器的父类
扩展类加载器:由jvm创建,开发人员可以获取引用,并且可以配置,是系统类加载器的父类
系统类加载器:由jvm创建,开发人员可以获取引用,并且可以配置
运行下面代码可以看到类加载器加载了哪些东西
public static void main(String[] args) {
//启动类加载器属于jvm直接操作,不允许获取启动类加载器的引用
System.out.println("BootstrapClassLoader 的加载路径: ");
// String[] bootUrls = System.getProperty("sun.boot.class.path").split(";");
URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
for (URL url : urls)
System.out.println(url);
System.out.println("----------------------------");
// 取得扩展类加载器
URLClassLoader extClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader().getParent();
System.out.println(extClassLoader);
System.out.println("扩展类加载器 的加载路径: ");
urls = extClassLoader.getURLs();
for (URL url : urls)
System.out.println(url);
System.out.println("----------------------------");
// 取得应用(系统)类加载器
URLClassLoader appClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
System.out.println(appClassLoader);
System.out.println("应用(系统)类加载器 的加载路径: ");
urls = appClassLoader.getURLs();
for (URL url : urls)
System.out.println(url);
System.out.println("----------------------------");
}
classpath配置的路径,就是系统类加载器加载的位置与jar包
注意:classpath环境变量配置的路径,如果是目录表示加载里面的class文件,或带包文件夹的class文件(不加载目录里面的jar包),如果是jar包,表示加载jar包里面的class文件或带包文件夹的class文件