类加载器与Class类

栏目: Java · 发布时间: 5年前

内容简介:类加载器负责根据类的全限定名将class文件加载到JVM内存,生成Class类的对象。它分为以下几种类型:下面是结合源码,画出的利用AppClassLoader查找类的流程图:

类加载器分类

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

  1. Bootstrap Classloader
    由C++所写,在JVM启动后初始化,负责加载%JAVA_HOME%/jre/lib,-Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类
  2. 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 实现的)。
  3. AppClassLoader
    也是sun.misc.Launcher的内部类,继承自java.net.URLClassLoader,负责加载来自在命令java中的-classpath或者java.class.path系统属性或者CLASSPATH系统属性所指定的路径中的类。其parent ClassLoader为ExtClassLoader,且是我们自定义类默认的类加载器。

类加载过程(双亲委派机制)

下面是结合源码,画出的利用AppClassLoader查找类的流程图:

类加载器与Class类

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;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人人时代

人人时代

[美]克莱•舍基(Clay Shirky) / 胡泳、沈满琳 / 中国人民大学出版社 / 2012-8 / 49.90元

[内容简介] •一而再,再而三出现的公众事件,绝不仅是来自草根的随兴狂欢,而是在昭示着一种变革未来的力量之崛起!基于爱、正义、共同的喜好和经历,人和人可以超越传统社会的种种限制,灵活而有效地采用即时通信、移动电话、网络日志和维基百科等新的社会性工具联结起来,一起分享、合作乃至展开集体行动。人人时代已经到来。 •微软、诺基亚、宝洁、BBC、乐高、美国海军最推崇的咨询顾问,“互联网革命最伟......一起来看看 《人人时代》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具