java 類的加載結論二

結論二:
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 與返回根類加載器不是同一個含義





    }


}


 

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