A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章小东 初级黑马   /  2012-8-5 22:11  /  1534 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学了类加载器,听的不是很明白,谁来帮我解答下ClassLoader是如何加载Class的。谢谢

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 新人亮相,赞一个!

查看全部评分

5 个回复

倒序浏览
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构

分析.JPG (18.01 KB, 下载次数: 24)

分析.JPG
回复 使用道具 举报
不同的CLASS由不同的ClassLoader负责加载

一个JVM虚拟机里默认的CLASSLOADE有Bootstrap ClassLoader、App ClassLoader、Extension ClassLoader,
需要注意的是,Bootstrap ClassLoader是JVM级别的,是用C++编写,比较特殊,一般咱都看不到,值是NULL。

而Extension ClassLoader、App ClassLoader都是java类。

在启动的时候,JVM先启动Bootstrap ClassLoader,然后再初始化sun.misc.Launcher ,然后由sun.misc.Launcher初始化Extension ClassLoader、App ClassLoader。

在加载一个类时,首先会由Bootstrap ClassLoader先进行寻找,找不到了才再由Extension ClassLoader寻找,最后才是App ClassLoader。

至于再具体的过程,本人就才疏学浅了,只能拜请高人指点了~~~

希望能够帮助到楼主吧,版主也幸苦了~~~

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Java程序(class文件)并不是本地的可执行程序。当运行Java程序时,首先运行JVM(Java虚拟机),然后再把Java class加载到JVM里头运行,负责加载Java class的这部分就叫做Class Loader.
JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样,BootstrapClassLoader是用本地代码实现的,它负责加载核心JavaClass(即所有java.*开头的类)。另外JVM还会提供两个ClassLoader,它们都是用Java语言编写的,由BootstrapClassLoader加载;其中Extension ClassLoader负责加载扩展的Javaclass(例如所有javax.*开头的类和存放在JRE的ext目录下的类),ApplicationClassLoader负责加载应用程序自身的类。   当运行一个程序的时候,JVM启动,运行bootstrapclassloader,该ClassLoader加载java核心API(ExtClassLoader和AppClassLoader也在此时被加载),然后调用ExtClassLoader加载扩展API,最后AppClassLoader加载CLASSPATH目录下定义的Class,这就是一个程序最基本的加载流程。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
不好意思。刚速度卡。不小心发了两次,问题已解决
回复 使用道具 举报
哈哈,以前我也不懂,学习了~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马