02.类的加载

来源:互联网 发布:ps4适合女生的游戏知乎 编辑:程序博客网 时间:2024/06/06 21:39

- 定义:

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

2.类的加载最终产品是位于堆(heap)区中的Class对象
3.Class对象封装了类在方法区内的数据结构,并且向java程序员提供了访问方法区内的数据结构的接口(这些接口都是反射接口)

如图:
这里写图片描述

然后我们在从api的方式, 看一下是怎么处理的:
-首先找到rt.jar java.lang.Class类,注释已明白写着:只有java虚拟机才可以创建Class对象,构造方法私有化(不允许用户自己new这个对象)
Class.class

- 加载 .class文件的方式

 - 从本地系统中直接加载 - 通过网络环境下载.class文件 - **从zip、jar等归档文件中加载.class文件**(常用,jar包) - 从专有数据库中提取.class文件 - 将java源文件编译为.class文件

类的加载器

类加载器并不需要等到某个类被“首次主动使用”(初始化)的时候再去加载。
- java虚拟机自带的加载器

 - 根类加载器(bootstrap)     - 使用c++编写,程序员无法在程序中获得该类 - 扩展类加载器(Extension)     - 使用java代码实现 - 系统类加载器(System)也叫应用加载器(AppClassLoader)     - 使用java代码实现

- 用户自定义的类加载器

 - java.lang.ClassLoader的子类 - 用户可以定制类的加载方式 

下面请看API
这里写图片描述

package test4;public class Test {    public static void main(String[] args) throws Exception {        Class clazz1 = Class.forName("java.lang.String");        System.out.println(clazz1.getClassLoader());        Class clazz2 = Class.forName("test4.C");        System.out.println(clazz2.getClassLoader());    }}class C{}
控制台:null sun.misc.Launcher$AppClassLoader@5563d208说明:String 是由根类加载器(bootstrap)加载,C类是有应用加载器加载

JVM 规范允许类加载器在预料某个类要被使用的时候就预先加载他,如果在加载过程中遇到了.class文件缺失或者错误,类加载器必须在“首次主动使用”该类时才报告错误(LinkageError);
如果这个类一直没有被程序主动使用过,那么类加载器就一直不会报错。
有两种类型的类加载器

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 福州住房公积金管理中心 常州住房公积金查询 遂宁市住房公积金管理中心 天津市住房公积金管理中心 湖南住房公积金查询个人账户 深圳住房公积金电话 住房公积金查询网 洛阳住房公积金 呼和浩特住房公积金查询 青海省住房公积金查询 郑州住房公积金管理中心 苏州住房公积金查询 成都住房公积金查询个人账户 住房公积金中心电话 昆山住房公积金管理中心 吉林市住房公积金查询 沈阳住房公积金 沈阳住房公积金管理中心 贵港市住房公积金管理中心 萍乡住房公积金查询 郑州市住房公积金 赣州市住房公积金管理中心 济南住房公积金查询 济宁市住房公积金个人查询 西安住房公积金查询网 西安市住房公积金中心 西安市住房公积金 西安市住房公积金管理中心 西安市个人住房公积金查询 个人住房公积金查询个人账户 西安住房公积金个人帐户查询 住房公积金账户 查询住房公积金个人账户余额 怎么查询住房公积金 个人住房公积金 怎样查询住房公积金账户余额 西安个人住房公积金查询 住房公积金怎么用 住房公积金个人查询 提住房公积金条件 自住房申请条件