結論二:
4.系統類加載器的父加載器是擴展類加載器,而擴展類加載器是根類加載器,但是在調用ClassLoader.getParent() 方法獲取父加載器時,根類加載器返回null
5.java 中的數組類對象並不是由類加載器進行加載的,它是由jvm根據需要進行動態加載的。除了數組,java任何的類都是由類加載器進行加載的
6. 數組對象調用其getClass()方法獲取其Class 對象,然後再調用getClassLoader 方法拿到類加載器與其元素類型的class 對象的類加載器一致
7. 原生的數組對象的class對象,調用getClassLoader 會返回null,這裏的null 並不是表示其元素的類加載器是根類加載器,而是表示其不存在,因爲原生類型是由jvm創建生成的,不是由類加載器加載的
package com.tanruyu.jvm.classloading;
import java.io.IOException;
import java.net.URL;
import java.util.Enumeration;
/**
* 結論:
* 4.系統類加載器的父加載器是擴展類加載器,而擴展類加載器是根類加載器,但是在調用ClassLoader.getParent() 方法獲取父加載器時,根類加載器返回null
* 5.java 中的數組類對象並不是由類加載器進行加載的,它是由jvm根據需要進行動態加載的。除了數組,java任何的類都是由類加載器進行加載的
* 6. 數組對象調用其getClass()方法獲取其Class 對象,然後再調用getClassLoader 方法拿到類加載器與其元素類型的class 對象的類加載器一致
* 7. 原生的數組對象的class對象,調用getClassLoader 會返回null,這裏的null 並不是表示其元素的類加載器是根類加載器,而是表示其不存在,因爲原生類型是由jvm創建生成的,不是由類加載器加載的
*/
public class ClassLoaderTest2 {
public static void main(String[] args) throws IOException {
ClassLoader classLoader = ClassLoader.getSystemClassLoader();
System.out.println(classLoader);
while (classLoader != null) {
classLoader = classLoader.getParent();
System.out.println(classLoader);
}
System.out.println("----------------------------------");
ClassLoader threadContextClassLoader = Thread.currentThread().getContextClassLoader();
System.out.println(threadContextClassLoader);
Enumeration<URL> resources = threadContextClassLoader.getResources("com/tanruyu/jvm/classloading/ClassLoaderTest2.class");
while(resources.hasMoreElements()) {
URL url = resources.nextElement();
System.out.println(url);
}
System.out.println("----------------------------------");
String[] strArr = new String[]{};
System.out.println(strArr.getClass().getClassLoader());//null ,數組類型中的對象返回的類加載器與其元素類型的類加載器一致
System.out.println("*************");
ClassLoaderTest2 [] testArr = new ClassLoaderTest2[]{};
System.out.println(testArr.getClass().getClassLoader());// sun.misc.Launcher$AppClassLoader@18b4aac2 ,
int [] intArr = new int[]{};
System.out.println(intArr.getClass().getClassLoader());//原生類型的數組的類加載不存在,所以返回null,這裏面的null 與返回根類加載器不是同一個含義
}
}