`
眼光独到
  • 浏览: 63472 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

关于classLoader(类加载器)的一些心得

阅读更多

      今天淘宝实习生2面,效果不太好,对应用比较熟,对底层的东西掌握比较薄弱。

      问了一下classLoader的东西都不太清楚,发现自己还菜的很,面试官比较好说话,最后给我两个建议:1,多去看看底层的东西。用的东西很简单,只要学一学谁都会,只有掌握底层的东西才能有自己的知识体系,才能有更大的发展空间;2,面试的时候,不知道的问题就说不知道,一定不要猜!

     下午看陈雄华的《精通Spring2.X--企业应用开发详解》的时候看到了ClassLoader的东西,研读以后写写心得。

     ClassLoader也就是类装载器,把一个类装入JVM中要经过以下步骤:

    1、装载:查找和导入Class文件。

    2、链接:执行校验,准备和解析步骤。

       a)校验:检查载入class文件数据的正确性。

       b)准备:给类的静态变量分配存储空间。

       c)解析:将符号引用转成直接引用。

    3、初始化:对类的静态变量,静态代码块执行初始化工作。

 

      ClassLoader是一个重要的JAVA运行时组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader,分别是根装载器,ExtClassLoader(扩展类装载器),AppClassLoader(系统类装载器)。其中根装载器不是ClassLoader的子类,是用C++编写的,负责加载JRE的核心类库。ExtClassLoader,AppClassLoader都是ClassLoader的子类。ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载ClassPath路径下的类包。

   

     JVM装载类是使用“全盘负责委托机制”,“全盘负责”就是当一个ClassLoader装载一个类时,除非显式调用另外一个ClassLoader,该类所依赖及引用的类也由这个ClassLoader载入;“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。

 

   ClassLoader中包含常用方法:

   ·Class loadClass(String name)

        name指定类装载器需要装载类的名字(必须使用全限定名)。

   ·Class loadClass(String name,boolean resolve)

        resolve参数告诉类装载器是否需要解析该类。

   ·Class definaClass(String name,byte[] b,int off, int len)

        name为全限定名,该类文件的字节数组转化成JVM内部的java.lang.Class对象,字节数组可以从本地文件系统,远程网络获取。

   ·Class findSystemClass(String name)

        从本地文件系统载入Class文件,如果本地文件不存在该Class文件,将抛出ClassNotFoundException异常,该方法是JVM默认使用的装在机制。

   ·Class findLoaderClass(String name)

       调用该方法来查看ClassLoader是否已装入某个类。如果已装入,那么返回java.lang.Class对象,否则返回null。如果强行装载已存在的类,将会抛出链接错误。

 

     类文件被装载并解析后,在JVM将拥有一个对应的java.lang.Class类描述对象,该类的实例都拥有指向这个类描述对象的引用,而类描述对象又拥有指向关联ClassLoader的引用。

 

 

代码示例:

    ClassLoader loader = Thread.currentThread().getContextClassLoader();//得到类加载器

    Class clazz = loader.loadClass("com.waiting.reflect.Car");//得到Car类描述对象

    Constructor cons = clazz.getDeclaredConstructor((Class[])null);//获取Car类的构造器

    Car car = (Car)cons.newInstance();//得到实例化的car对象

分享到:
评论

相关推荐

    ClassLoader类加载器

    ClassLoader的API使用和自定义

    ClassLoader类加载机制和原理详解

    ClassLoader类加载机制和原理详解

    JAVA ClassLoader 讲解 (类加载器)

    ClassLoader类加载器讲解,理解JAVA类加载机制

    ClassLoader类加载机制

    类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...

    【图解版】深入分析ClassLoader类加载工作机制

    【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!

    java的ClassLoader类加载器机制

    jvm运行的过程中,需要载入类,而类的加载需要类加载器,本文章提供了java的类加载器的工作原理。可以使读者更加理解jvm的运行机制。

    classloader类加载器_基于java类的加载方式详解

    下面小编就为大家带来一篇classloader类加载器_基于java类的加载方式详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    java应用程序类加载器,ClassLoader for java Application

    java应用程序类加载器(ClassLoader for java Application),类似exe4j, 方便启动java程序, 配置灵活,支持多平台选择性配置

    Java类加载器(ClassLoader)1

    如果户创建的JAR放在此录下,也会动由扩展类加载器加载.应程序类加载器(系统类加载器,Application ClassLoader)java语编写,由sun.

    java类加载器实例

    类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...

    Java中ClassLoader类加载学习总结

    本篇文章主要给大家讲述了Java中ClassLoader类加载的原理以及用法总结,一起学习下。

    使用classloader动态加载Class

    NULL 博文链接:https://ldbjakyo.iteye.com/blog/1046984

    类加载器,classload

    关于类加载器的 上课ppt -java虚拟机自带的加载器 根类加载器(Bootstrap) c++写的看不到扩展类加载器(extension) 系统类加载器(System) AppClassLoad 用户自定义的类加载器 Java.lang.ClassLoader的子类

    掌握Java类加载器

    类加载器是Java最强大的特征之一。但是开发者常常忘记类加载组件。类加载器是在运行时负责寻找和加载类文件的类。Java允许使用不同的类加载器,甚至自定义的类加载器。类加载器从源文件(通常是.class 或 .jar文件)...

    java类加载器

    ClassLoader 三种类加载方式 Boostrap Extenxsion 以及Application ClassLoad分别适用的场景

    自定义类加载器

    简单的自定义类加载器问候世界hello word,基于磁盘的ClassLoader

    ClassLoader:ClassLoader动态加载类

    类加载器 ClassLoader动态加载类 简单示例 包装tank.test; 导入java.util.Scanner; 导入tank.classloader.ClassLoaderManager; 导入tank.classloader.MyClassLoaderManager; 导入tank.classloader....

    S18-ClassLoader类加载流程1

    1. 加载(Loading):classpath,jar包,网络,磁盘位置下的类的class以二进制字节流读进来,在内存 2. 验证(Verification)

    Java类加载机制与反射-PPT

    Java的类加载机制:加载,连接,初始化。JAVA类加载器: Bootstrap ClassLoader : 根类加载器, Extension ClassLoader: 扩展类加载器, System ClassLoader : 系统类加载器, Java反射

    ClassLoader(类加载机制)1

    1. ClassLoader(类加载机制) 3. findLoadedClass (查找JVM已经加载过的类) 4. defineClass (定义一个Java

Global site tag (gtag.js) - Google Analytics