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文件