中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

好程序員Java學習路線分享Java面試題之加載機制

發布時間:2020-06-17 11:54:32 來源:網絡 閱讀:210 作者:wx5d42865f47214 欄目:編程語言

好程序員Java學習路線分享Java面試題之加載機制,面試場景:
面試官第一問:
請問,我現在編寫一個類,類全名如下:java.lang.String,
我們知道JDK也給我們聽過了一個java.lang.String,
那么,我們編寫的這個String類能否替換到JDK默認提供,也就是說程序實際運行的時候,會加載我們的String還是JDK的String?為什么?
如果,你無法確定?那么第二問:
了解類的加載機制嗎?知道JDK的類加載器嗎?雙親委托機制說說看
如果,你還不了解,那么我們聊聊今天的天氣吧!
1,首先,什么是類的加載機制?
JVM使用Java類的流程如下:
1,Java源文件----編譯---->class文件
2,類加載器ClassLoader會讀取這個.class文件,并將其轉化為java.lang.Class的實例。有了該實例,JVM就可以使用他來創建對象,調用方法等操作了。
那么ClassLoader是以一種什么機制來加載Class的?
這就是我們要談的類的加載機制!
2,搞清楚這個問題,首先要知道,我們用到的Class文件都有哪些來源?
1,Java內部自帶的核心類,位于$JAVA_HOME/jre/lib,其中最著名的莫過于rt.jar
2,Java的擴展類,位于$JAVA_HOME/jre/lib/ext目錄下
3,我們自己開發的類或項目開發用到的第三方jar包,位于我們項目的目錄下,比如WEB-INF/lib目錄
3,那么,針對這些Class,JDK是怎么分工的?誰來加載這些Class?
針對不同的來源,Java分了不同的ClassLoader來加載
1,Java核心類,這些Java運行的基礎類,由一個名為BootstrapClassLoader加載器負責加載。這個類加載器被稱為“根加載器或引導加載器”
注意:BootstrapClassLoader不繼承ClassLoader,是由JVM內部實現。法力無邊,所以你通過java程序訪問不到,得到的是null。
2,Java擴展類,是由ExtClassLoader負責加載,被稱為“擴展類加載器”。
3,項目中編寫的類,是由AppClassLoader來負責加載,被稱為“系統類加載器”。
4, 那憑什么,我就知道這個類應該由老大BootStrapClassLoader來加載?
這里面就要基于雙親委托機制?
所謂雙親委托機制,就是加載一個類,會先獲取到一個系統類加載器AppClassLoader的實例,然后往上層層請求,先由BootstarpClassLoader去加載,
如果BootStrapClassLoader發現沒有,再下發給ExtClassLoader去加載,還是沒有,才由AppClassLoader去加載。
如果還是沒有,則報錯
5,所以,上述問題的答案你清楚了嗎?
JDK提供java.lang.String類,默認在rt.jar這個包里面,所以,默認會由BootstarpClassLoader加載,
所以,我們自己編寫的java.lang.String,都沒有機會被加載到
6,給兩段程序看看,類加載器的關系
案例1:創建一個自己的類,然后打印其類加載器

public class ClassLoaderTest {
    public static void main(String[] args) throws ClassNotFoundException {
        Class<?> clazz = Class.forName("com.qianfeng.thread.client.Programmer");
        ClassLoader classLoader = clazz.getClassLoader();
        System.out.println(classLoader.getClass().getSimpleName());
    }
}

案例2:打印其雙親類加載器信息

while(classLoader.getParent() != null){
       classLoader = classLoader.getParent();
       System.out.println("-->"+classLoader.getClass().getSimpleName());
}
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宝清县| 迁西县| 钟祥市| 饶平县| 永昌县| 晋城| 黎城县| 莎车县| 泽普县| 日喀则市| 稻城县| 中方县| 东港市| 台湾省| 资源县| 五大连池市| 法库县| 西华县| 青海省| 大悟县| 台湾省| 开鲁县| 灯塔市| 道真| 灵丘县| 郴州市| 措勤县| 疏勒县| 林西县| 西青区| 平安县| 东城区| 昆明市| 阳西县| 应城市| 东方市| 民权县| 化州市| 宜章县| 明溪县| 同德县|