亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁 > IT技術(shù) > 其他 > 正文

              幾種類加載器的使用體會
              2022-05-11 11:08:42


              類加載器的分類

              • JVM支持兩種類型的類加載器,分別為引導(dǎo)類加載器(Bootstrap ClassLoader)和自定義類加載器(User-Defined ClassLoader)。
              • 從概念上來講,自定義類加載器一般指的是程序中由開發(fā)人員自定義的一類類加載器,但是Java虛擬機規(guī)范卻沒有這么定義,而是將所有派生于抽象類ClassLoader的類加載器都劃分為自定義類加載器。
              • 無論類加載器的類型如何劃分,在程序中我們最常見的類加載器始終只有3個,如下圖所示:

              幾種類加載器的使用體會_開發(fā)語言

              代碼示例

              package chapter01.com.wust.yq;

              public class ClassLoaderTest {

              public static void main(String[] args) {

              //獲取系統(tǒng)類加載器
              ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
              System.out.println(systemClassLoader); //sun.misc.Launcher$AppClassLoader@18b4aac2

              //獲取其上層,擴展類加載器
              ClassLoader extClassLoader = systemClassLoader.getParent();
              System.out.println(extClassLoader); //sun.misc.Launcher$ExtClassLoader@1b6d3586

              //獲取其上層
              ClassLoader bootstrapClassLoader = extClassLoader.getParent();
              System.out.println(bootstrapClassLoader); //null

              //對于用戶自定義類來說:默認使用系統(tǒng)類加載器進行加載
              ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
              System.out.println(classLoader); //sun.misc.Launcher$AppClassLoader@18b4aac2

              //String類使用引導(dǎo)類加載器進行加載的。 ---> Java核心類庫都是使用引導(dǎo)類加載器進行加載的
              ClassLoader classLoader1 = String.class.getClassLoader();
              System.out.println(classLoader1); //null
              }

              }

              幾種類加載器的使用體會_開發(fā)語言_02

              虛擬機自帶的加載器?

              • 啟動類加載器(引導(dǎo)類加載器,Bootstrap ClassLoader)

              幾種類加載器的使用體會_加載_03

              • 擴展類加載器

              幾種類加載器的使用體會_自定義_04

              • 應(yīng)用程序類加載器

              幾種類加載器的使用體會_java_05

              代碼示例

              package chapter01.com.wust.yq;

              import sun.misc.Launcher;

              import java.net.URL;

              public class ClassLoaderTest1 {

              public static void main(String[] args) {
              System.out.println("************啟動類加載器************");
              //獲取BootstrapClassLoader能夠加載類的路徑
              URL[] urLs = Launcher.getBootstrapClassPath().getURLs();
              for (URL element : urLs) {
              System.out.println(element.toExternalForm());
              }

              //獲取擴展類加載器能夠加載類的路徑
              System.out.println("************擴展類加載器************");
              String extDirs = System.getProperty("java.ext.dirs");
              System.out.println(extDirs);
              }

              }

              幾種類加載器的使用體會_加載_06

              用戶自定義類加載器

              在Java的日常應(yīng)用程序開發(fā)中,類的加載幾乎是由上節(jié)3種類加載器(引導(dǎo)、擴展和系統(tǒng)類加載器)相互配合執(zhí)行的,在必要時,我們還可以自定義類加載器,來定制類的加載方式。

              為什么要自定義類加載器

              • 隔離加載類
              • 修改類加載的方式
              • 擴展加載源
              • 防止源碼泄漏

              用戶自定義類加載器實現(xiàn)步驟

              幾種類加載器的使用體會_java_07

              關(guān)于ClassLoader

              ClassLoader類,它是一個抽象類,其后所有的類加載器都繼承自ClassLoader(不包括啟動類加載器)

              幾種類加載器的使用體會_自定義_08

              獲取ClassLoader的幾種方?

              幾種類加載器的使用體會_類加載器_09



              本文摘自 :https://blog.51cto.com/u

              開通會員,享受整站包年服務(wù)立即開通 >