zoukankan      html  css  js  c++  java
  • Java URLClassLoader 和 ClassLoader类加载器

    开始:看名字都带有ClassLoader,叫做类加载器,事实上是可以理解为动态的加载类,不过,也不是只能加载类,也可以加载其他形式的文件,比如说.properties属性文件。

      区别:其实在两个类加载器有一点小区别,就在于能够加载的类存放的位置,从JDK源码上来看其实是URLClassLoader继承了ClassLoader,也就是说URLClassLoader把ClassLoader扩展了一下,所以可以理解成URLClassLoader功能要多点。

    ClassLoader只能加载classpath下面的类,而URLClassLoader可以加载任意路径下的类。他们的继承关系如下:

    public class URLClassLoader extends SecureClassLoader {}
    public class SecureClassLoader extends ClassLoader {}

    URLClassLoader是在java.net包下的一个类。一般动态加载类都是直接用Class.forName()这个方法,但这个方法只能创建程序中已经引用的类,并且只能用包名的方法进行索引,比如Java.lang.String,不能对一个.class文件或者一个不在程序引用里的.jar包中的类进行创建。
    URLClassLoader提供了这个功能,它让我们可以通过以下几种方式进行加载:
        * 文件: (从文件系统目录加载)
        * jar包: (从Jar包进行加载)
        * Http: (从远程的Http服务进行加载)

    当class文件或者resources资源文件更新后,我们需要重新加载这些类或者Jar。从理论上来说,当应用清理了对所加载的对象的引用,那么垃圾收集器就会将这些对象给收集掉,然后我们再重新加载新的JAR文件,并创建一个新的URLClassLoader来加载。可是这里有一个问题,就是我们不知道垃圾收集器什么时候将那些未被引用的对象给收集掉,特别是在Windows中,因为在Windows中打开的文件是不可以被删除或被替换的。

    在Java7的Build 48版中,URLClassLoader提供了close()这个方法,可以将打开的资源全部释放掉,这个给开发者节省了大量的时间来精力来处理这方面的问题。

    URL url = new URL("file:foo.jar");
           URLClassLoader loader = new URLClassLoader (new URL[] {url});
           Class cl = Class.forName ("Foo", true, loader);
           Runnable foo = (Runnable) cl.newInstance();
           foo.run();
           loader.close ();
    // foo.jar gets updated somehow
    loader = new URLClassLoader (new URL[] {url});
           cl = Class.forName ("Foo", true, loader);
           foo = (Runnable) cl.newInstance();
           // run the new implementation of Foo
           foo.run();

    =====网友 

    ClassLoader 与 URLClassLoader 的用法 - CSDN博客
    http://blog.csdn.net/a454832841/article/details/38661635

    ClassLoader工作机制 - 温布利往事 - 博客园--貌似很不错图文并茂
    http://www.cnblogs.com/xujian2014/p/5551153.html

  • 相关阅读:
    python 执行sql得到字典格式数据
    python爬虫 url链接编码成gbk2312格式
    windows环境下elasticsearch安装教程(单节点)
    python SQLServer 存储图片
    爬虫的本质是和分布式爬虫的关系
    requests form data 请求 爬虫
    mysql 删除 binlog 日志文件
    查看mysql数据表的大小
    xshell 连接报错 Disconnected from remote host
    centos 7.3 安装 mysqldb 报错 EnvironmentError: mysql_config not found ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
  • 原文地址:https://www.cnblogs.com/rogge7/p/7766522.html
Copyright © 2011-2022 走看看