美文网首页
如果没有加载过才加载的写法

如果没有加载过才加载的写法

作者: 房房1524 | 来源:发表于2020-04-27 10:56 被阅读0次

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 :默认构造函数的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. 注意函数单一性原则

总结

东西很简单,就是修改bug的时候突然想到的,大家遇到不知道怎么实现比较合理的时候其实可以参考源码,既可以了解源码是怎么实现的(说不定面试的时候用的上呢),也可以用到实践中。虽然简单但是也有意义!

相关文章

  • 如果没有加载过才加载的写法

    1. 加载完就不加载的写法 1.1是不是可以参考双亲委派机制 1.2那就分析一下ClassLoader源码吧 注释...

  • vue之router路由最优美写法,懒加载、打包代码分离。

    一、基础写法,没有懒加载,打包分离代码 官方最基础的路由写法 二、路由懒加载,import()方法。(按需加载) ...

  • vue之router路由最优美写法,懒加载、打包代码分离。

    一、基础写法,没有懒加载,打包分离代码 官方最基础的路由写法 二、路由懒加载,import()方法。(按需加载+j...

  • 委托模式

    classLoader双亲委托1、首先检查该类有没有被自己加载过,如果加载过了,直接返回加载过的Class类;否则...

  • 路由懒加载

    正常写法 懒加载写法

  • 热修复原理解析

    1. 类加载机制 1.1 类加载UML图 1.2 loadClass流程 首先先判断是否已经加载过这个类 如果没有...

  • 23.路由的懒加载

    路由的懒加载:就是需要的时候在加载 这种写法就能实现路由的懒加载

  • jQuery(一)

    jQuery加载: 比上面JS写法先弹出,因为window.onload是把页面元素加载、渲染完才弹出,而read...

  • 封装一下图片下载功能

    根据网络情况来加载图片 基本操作思路 如果是已经下载过原图,缓存下来了,直接从缓存中加载1.1.如果是没有加载过图...

  • jvm 类加载器

    在加载类别时,每个类别加载器会先将加载类别的任务交由其parent,如果parent找不到,才由自己负责加载,如果...

网友评论

      本文标题:如果没有加载过才加载的写法

      本文链接:https://www.haomeiwen.com/subject/kqfywhtx.html