资讯专栏INFORMATION COLUMN

类加载器与Class类

ddongjian0000 / 430人阅读

摘要:类加载器分类类加载器负责根据类的全限定名将文件加载到内存,生成类的对象。其为,且是我们自定义类默认的类加载器。具体的源码分析可以参见深入理解类加载器。

类加载器分类

类加载器负责根据类的全限定名将class文件加载到JVM内存,生成Class类的对象。它分为以下几种类型:

Bootstrap Classloader
由C++所写,在JVM启动后初始化,负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类

ExtClassLoader
是sun.misc.Launcher的内部类,继承自java.net.URLClassLoader->java.security.SecureClassLoader->java.lang.ClassLoader,在rt.jar中,由Bootstrap Classloader加载,负责加载%JAVA_HOME%/jre/lib/ext和java.ext.dirs系统变量指定路径中的类。parent ClassLoader为null(因为Bootstrap Classloader并不是由java实现的)。

AppClassLoader
也是sun.misc.Launcher的内部类,继承自java.net.URLClassLoader,负责加载来自在命令java中的-classpath或者java.class.path系统属性或者CLASSPATH系统属性所指定的路径中的类。其parent ClassLoader为ExtClassLoader,且是我们自定义类默认的类加载器。

类加载过程

双亲委派机制:如果一个类未加载,那么必须先由其父加载器(Bootstrap Classloader可以认为是ExtClassLoader父加载器)尝试加载,如果父加载器在其路径内找不到该类才由子加载器加载。可以防止核心类被外来类覆盖。具体的源码分析可以参见深入理解Java类加载器(ClassLoader)。
下面是结合源码,画出的利用AppClassLoader查找类的流程图:

Class类

我们通常写的用class(首字母c小写)定义的类,表征了java虚拟机里对象的类型(java是强类型语言),但同时这些类又都是java.lang.Class(首字母C大写)的对象,通过AppClassLoader加载进虚拟机内存方法区。每个类都对应一个独一无二的Class对象,包括Java基本类型、void关键字及数组(所有同一维度和类型的数组拥有同样的Class,数组的长度不做考虑。对应Class的名字表示为维度和类型。比如一个整型数据的Class名为“[I”,字节型三维数组Class名为“[[[B”,两维对象数组Class名为“[[Ljava.lang.Object”)。得到Class对象的方法有三种:

MyObject foo = New MyObject();
Class c = foo.getClass();

Class c = Class.ForName("MyObject");

Class c = MyObject.class;

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74791.html

相关文章

  • 装饰器与元数据反射(4)元数据反射

    摘要:庆幸的是,已经支持反射机制,来看看这个特性吧元数据反射可以通过安装包来使用元数据反射的若要使用它,我们需要在中设置为,同时添加的引用,同时加载文件。复杂类型序列化的团队为复杂类型的元数据序列化做出了努力。 本篇内容包括如下部分: 为什么JavaScript中需要反射 元数据反射API 基本类型序列化 复杂类型序列化 为什么JavaScript中需要反射? 关于反射的概念,摘自百度百...

    gaosboy 评论0 收藏0
  • Tomcat7---是怎样被加载

    摘要:所有这些类对于和应用程序都是可见的。或者日志实现类。其中包括称为的的增强类以及由内部使用的库的软件包重命名副本。这个类加载器搜索的位置由中的属性定义。中的所有其他类加载器都遵循通常的代理模式。 最好先了解Java的双亲委派机制再看这篇文章。 整体架构 Bootstrap | System | Common ...

    jollywing 评论0 收藏0
  • CSS:选择器与优先级

    摘要:样式优先级原则总的原则规定拥有更高确定度的选择器优先级更高如果样式中包含冲突的规则,且它们具有相同的确定度。 样式优先级原则 总的原则1.CSS规定拥有更高确定度的选择器优先级更高2.如果样式中包含冲突的规则,且它们具有相同的确定度。那么,后出现的规则优先级高。 优先级:由高到低(从上到下) !important 内联(1,0,0,0) id: (0,1,0,0) 类:(0,0,1,...

    linkFly 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<