美文网首页
Java - 类加载机制

Java - 类加载机制

作者: sunboximeng | 来源:发表于2018-06-18 21:34 被阅读9次
    Loading.jpg

    JVM启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去。此外,它也可以加载其他的资源,比如配置文件、图片等等。
    所以他和FileReader很像,只不过返回值不一样。

    获得ClassLoader的几种方法
    • this.getClass.getClassLoader(); // 使用当前类的ClassLoader
    • Thread.currentThread().getContextClassLoader(); // 使用当前线程的ClassLoader
    • ClassLoader.getSystemClassLoader(); // 使用系统ClassLoader,即系统的入口点所使用的ClassLoader。
    用ClassLoader载入资源的几种方法
    • 类的载入方式

      1. 使用Class静态方法 Class.forName
      Class cls = Class.forName("com.alexia.B");  
      B b = (B)cls.newInstance();
      
      1. 使用 ClassLoader
      /* Step 1. Get ClassLoader */  
      ClassLoader cl = this.getClass.getClassLoader();;  // 如何获得ClassLoader参考1  
      
      /* Step 2. Load the class */  
      Class cls = cl.loadClass("com.alexia.B"); // 使用第一步得到的ClassLoader来载入B  
         
      /* Step 3. new instance */  
      B b = (B)cls.newInstance(); // 有B的类得到一个B的实例  
      
      1. 直接 new
      B b = new B(); 
      
    • 文件的载入方式(例如配置文件等)
      假设想读取文件夹 /com/alexia/config 里的文件sys.properties文件

      1. 直接用IO流读取
        如果是属性配置文件,也可以通过java.util.Properties.load(is)将内容读到Properties里。
      File f = new File("C:/test/com/aleixa/config/sys.properties"); // 使用绝对路径 
      InputStream is = new FileInputStream(f); 
      
      1. 使用ClassLoader
      InputStream is = null;  
      is = this.getClass().getClassLoader().getResourceAsStream(  
           "com/alexia/config/sys.properties"); //方法1  
      //is = Thread.currentThread().getContextClassLoader().getResourceAsStream(  
           "com/alexia/config/sys.properties"); //方法2  
      //is = ClassLoader.getSystemResourceAsStream(
           "com/alexia/config/sys.properties"); //方法3 
      
      1. 使用ResourceBundle
    • Web资源的载入方式
      在web应用里当然也可以使用ClassLoader来载入资源,但更常用的情况是使用ServletContext.getResource()

    我们编写的java程序是如何运行的,我们自己编写的各种类是如何被加载到jvm(java虚拟机)中去的?

    参考资料:
    Java中用ClassLoader载入各种资源(类、文件、web资源)的方法
    一看你就懂,超详细java中的ClassLoader详解

    相关文章

      网友评论

          本文标题:Java - 类加载机制

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