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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© .....淡定 中级黑马   /  2013-9-8 18:53  /  1013 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

类加载器负责将.class文件加载到内存上,并为之生成称对应的java.lang.Class对象
这样说可以吗??

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 淡定

查看全部评分

3 个回复

倒序浏览
类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类,通过此实例的 newInstance()方法就可以创建出该类的一个对象。
基本上所有的类加载器都是java.lang.ClassLoader类的一个实例。java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字节代码,然后从这些字节代码中定义出一个 Java 类,即 java.lang.Class类的一个实例。除此之外,ClassLoader还负责加载 Java 应用所需的资源,如图像文件和配置文件等。为了完成加载类的这个职责,ClassLoader提供了一系列的方法。

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 张文豪 于 2013-9-8 23:17 编辑

JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤
1) 装载:查找并加载类的二进制数据;
2)链接:
验证:确保被加载类的正确性;
准备:为类的静态变量分配内存,并将其初始化为默认值;
解析:把类中的符号引用转换为直接引用;
3)初始化:为类的静态变量赋予正确的初始值;
          那为什么要有验证这一步骤呢?首先如果由编译器生成的class文件,它肯定是符合JVM字节码格式的,但是万一有高手自己写一个class文件,让JVM加载并运行,用于恶意用途,就不妙了,因此这个class文件要先过验证这一关,不符合的话不会让它继续执行的,也是为了安全考虑吧。

评分

参与人数 1技术分 +1 收起 理由
以防万一 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Java系统默认的类加载器有三个,Bootstarp,ExtClassLoder和AppClassLoader,Bootstarp类加载器是最高级类加载器,用于加载Java的核心类库中
的类,ExtClassLoader是Bootstarp的子类,用于加载打包到JDK安装目录下ext下的所有jar包,AppClassLoader是ExtClassLoader的子类,用于加载系统环境变量
ClASSPATH指定目录下的jar包,类加载器的委托机制,当需要加载某个类时,并不是直接到这个类的类加载器的管辖范围去加载,而是让父类去加载,这样一级级的
向上递推,也就是说任何一个类被加载时都是先充Bootstrap类加载器中查找,如果没有则一级级向下查找直到找到这个类的字节码并加载,如果都没有加载成功,
则直接抛出ClassNotFoundException
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马