在6.1小节中曾经讲过:创建对象前会完成类加载的操作。实际上,如果在程序中使用new关键字来创建一个对象,虚拟机会在创建对象之前需要完成一系列准备工作,类的加载只是这些工作中的一步。具体来说,这一系列工作可以分为类的加载、连接和初始化三步。多数情况下虚拟机都是连续完成这些工作的,因此这三个步骤也可以统称为“类的加载”或“类的初始化”,本小节将详细讲解这些步骤的过程和原理。
在Java语言中,每一个类都会编译成一个独立的字节码文件(.class文件),因此字节码文件中记录着类的各种信息,包括类有哪些属性,属性的类型和名称是什么,访问度是什么等等。类的加载就是把字节码文件读入内存的操作,把字节码读入内存是为了获得记录在字节码文件中关于类的所有信息。类的加载会在很多情况下进行,最典型的情况就是程序中第一次创建某个类的对象时会进行类的加载。当把一个类的信息读取到内存中后,虚拟机会把这个类的信息保存在java.lang包下的Class类的对象中。此处特别需要提醒初学Java的读者:“Class”是一个类的名称,它与表示类的、首字母为小写的“class”关键字是不同的。由此可见:Java虚拟机内存中,每一个Class类对象都保存了一个类(或接口、枚举)的信息。
类的加载是由“类加载器”完成的。类加载器通常都是由Java虚拟机产品提供的,实际上程序员也可以通过继承ClassLoader类来实现自己的类加载器。类加载器能够加载不同来源的字节码文件,例如可以加载工程文件
上一篇:MongoDB 聚合查询详解