类加载是什么?
类加载是什么?
在Java中,类的加载是指将一个类的class文件中的二进制数据读入到内存中,并创建一个java.lang.Class对象来在运行时表示这个类。类加载的过程是Java虚拟机运行时环境中的重要一环。
类加载是Java程序执行的关键步骤之一。当一个Java程序被启动时,JVM会负责类的加载工作。类的加载由ClassLoader来完成,它是Java中用于加载类的重要组件。ClassLoader根据配置、继承关系、访问控制等规则来定位和加载类。
类加载的过程可以简单地分为三个步骤:
1.加载:通过类的全限定名查找类的字节码文件并载入内存中。
2.链接:对字节码文件进行校验、准备和解析,为类变量分配内存并设置默认初始值,建立方法之间的引用关系。
3.初始化:执行类构造器
类加载的过程中,还存在Java虚拟机自带的三种类加载器:
1.Bootstrap ClassLoader:称为引导类加载器,是JVM自身的一部分,在JVM启动时最先被初始化,负责加载核心类库。它不能由Java代码直接引用。
2.Extension ClassLoader:也称为扩展类加载器,该加载器负责加载JAVA_HOME/jre/lib/ext/目录中的类库,或者由系统变量java.ext.dir指定的JAR类库。
3.Application ClassLoader:也被称为系统类加载器,它负责加载用户类路径上所指定的类库。
类加载器的层次结构是树状的,每个类加载器都有父类加载器,除了引导类加载器之外,每个类加载器只有一个父类加载器。加载器之间的父子关系形成了双亲委派模型,即当一个类需要被加载时,首先会委派给父加载器进行加载,只有在父加载器无法完成加载时,才会由子加载器尝试加载。
类加载机制的设计主要目的是保证Java平台的安全性和稳定性。通过类加载器的层次结构及双亲委派模型,可以防止用户自定义的类替代核心类库中的类,如果核心类库被篡改,JVM会在加载时检测到不一致的签名,从而保证了Java程序的安全性。
总之,类加载是Java虚拟机运行时环境中的重要组成部分。通过类加载器的层次结构和双亲委派模型,保证了Java程序的安全性,同时使得Java平台更加灵活和可扩展。