如果沒有加載過才加載的寫法

1. 加載完就不加載的寫法

1.1是不是可以參考雙親委派機制

1.2那就分析一下ClassLoader源碼吧

protected Class<?> loadClass(String name, boolean resolve)
        throws ClassNotFoundException
    {
            // First, check if the class has already been loaded
            Class<?> c = findLoadedClass(name);
            if (c == null) {
                try {
                    if (parent != null) {
                            // 注釋1 parent 為父加載器,可以自定義一個classLoader 依次打印出所有父類
                        c = parent.loadClass(name, false);
                    } else {
                        c = findBootstrapClassOrNull(name);
                    }
                } catch (ClassNotFoundException e) {
                    // ClassNotFoundException thrown if class not found
                    // from the non-null parent class loader
                }

                if (c == null) {
                    // If still not found, then invoke findClass in order
                    // to find the class.
                    c = findClass(name);
                }
            }
            return c;
    }

注釋1 :默認構(gòu)造函數(shù)的classLoader為 PathClassLoader
parent 為父加載器,可以自定義一個classLoader 依次打印出所有parent

 private static ClassLoader createSystemClassLoader() {
        String classPath = System.getProperty("java.class.path", ".");
        String librarySearchPath = System.getProperty("java.library.path", "");

        // String[] paths = classPath.split(":");
        // URL[] urls = new URL[paths.length];
        // for (int i = 0; i < paths.length; i++) {
        // try {
        // urls[i] = new URL("file://" + paths[i]);
        // }
        // catch (Exception ex) {
        // ex.printStackTrace();
        // }
        // }
        //
        // return new java.net.URLClassLoader(urls, null);

        // TODO Make this a java.net.URLClassLoader once we have those?
        return new PathClassLoader(classPath, librarySearchPath, BootClassLoader.getInstance());
    }
2.1做法比較簡單但是有幾個要注意的地方
  1. 盡量不要在方法中直接return
  2. 注意函數(shù)單一性原則

總結(jié)

東西很簡單,就是修改bug的時候突然想到的,大家遇到不知道怎么實現(xiàn)比較合理的時候其實可以參考源碼,既可以了解源碼是怎么實現(xiàn)的(說不定面試的時候用的上呢),也可以用到實踐中。雖然簡單但是也有意義!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1、classLoader 類加載器,將class文件加載到JVM虛擬機內(nèi)存中,使得程序可以運行。通常情況下,JV...
    helloWorld_1118閱讀 2,354評論 0 2
  • JVM類加載機制 概述 類加載過程 加載 通過類的全限定名獲取類的二進制流 將靜態(tài)存儲結(jié)構(gòu)轉(zhuǎn)化為方法區(qū)的運行時數(shù)據(jù)...
    東溪95閱讀 3,219評論 0 15
  • 初識ClassLoader ClassLoader類加載器在Java中的定義就是用來加載其他類到Jvm中的操作類,...
    逐夢々少年閱讀 1,315評論 1 5
  • 一:ClassLoader 從JVM結(jié)構(gòu)圖中可以看到,類加載器的作用是將Java類文件加載到Java虛擬機。 只有...
    阿菜的博客閱讀 1,882評論 0 8
  • 原創(chuàng) 若愚的歷險記 這是我們的第十一次相遇 我想告訴你,我找到那只杯子了。 ——《旺角卡門》 ...
    若愚歷險記閱讀 440評論 0 4

友情鏈接更多精彩內(nèi)容