java中classpath環境變量的深入探索

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章