一. 加载 “加载”是“类加载“过程的一个阶段。在这个阶段,JVM以字节流的形式获取.class文件,转化为方法区运行时数据结构,并在方法区生成Class对象(由此可知,Java中并不是所有对象都在堆中分配)。 二. 连接(一个比较重要的阶段,可以细分为三个小阶段)
连接阶段,目的是将已经加载到内存的类的字节流放到JVM的运行时环境,为初始化做好准备。
当然,把一个类带入自己的内部环境之前,JVM肯定会验证其合法性、可靠性,尽可能的保证这个类进入环境之后能正常运作,并防止其对JVM造成破坏,就像公司招人之前也会对应聘者进行各种考核一样,这个过程就是验证阶段。
如果验证通过,那么JVM就会让这个类做好准备,做准备的过程就是将类变量(static类型的变量)分配内存(在方法区中分配),并设置初始值的过程,注意是设置初始值(各类型的零值),并不是赋值,赋值要等到初始化阶段才进行。
如 public static int value=1;
这个阶段过后value值为0,这就是准备阶段
准备好了以后,JVM就会将常量池中的符号引用替换为直接引用。在这个阶段之前,该类所拥有的字段、方法的信息并不是直接记录的,而是存储在字段表和方法表中,经过这个阶段的解析之后字段和方法的引用将直接指向目标。这就像周杰伦的半岛铁盒,服务员告诉他:“楼上右转第二排的架子上就有了“,这时半岛铁盒对周杰伦来说就是符号引用。等杰伦走到楼上第二排的架子前,半岛铁盒已经触手可及,这时就变成了直接引用了。而半岛铁盒放在什么地方,不同的店会有所不同。同理,不同的JVM解析出来的引用也会不同。这个例子在细节上不是很恰当,但是从“半岛铁盒相对于杰伦的状态变化”上看,我认为可以帮助理解这个转换。这就是解析阶段。 三. 初始化 类加载的最后一个阶段就是初始化,这个“初始化“!=“实例化”。初始化阶段,开始真正的执行程序代码,初始化类变量等。这个阶段会执行类中定义的静态代码块。类变量与静态块按其在类中定义的先后顺序执行。
需要注意:
① 静态块不能访问定义在她之后的变量。
② 初始化子类之前会先初始化其父类
③ 接口初始化时,不会初始化其父接口
相关推荐
### Java 类加载器详解 #### 一、类加载器概述 在Java中,类加载器(Class Loader)是一项核心机制,用于将字节码(.class文件)加载到JVM中,使其成为运行时的对象。类加载器不仅实现了类的加载功能,还确保了...
### Java类加载内幕详解 #### 一、引言 在Java世界中,类加载机制是一项极为重要的技术。它不仅关乎程序的启动与运行,更是Java动态性与灵活性的基础。本文旨在深入探讨Java类加载的过程、原理及其在实际开发中的...
Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将类的字节码加载到内存中并转换为可执行的Java类。类加载器的作用不仅仅是加载类,还包括确保类的唯一性,避免重复加载,并且遵循特定的加载顺序。以下是对...
### Java类加载器详解 Java类加载器是Java运行时环境的一个关键组成部分,负责将类文件(.class)从各种来源加载到JVM中。它不仅管理类的生命周期,还确保了类的正确加载和初始化,是Java动态特性的基石。 #### 类...
本文将深入探讨"springboot+java类热加载"这一主题,包括其核心概念、实现方式以及相关技术。 **热加载(Hot Loading)**是开发过程中的一个重要功能,它允许开发者在不重启应用的情况下更新代码,提高开发效率。在...
Java中的类加载器遵循一个原则叫做“父母委托模型”,即当一个类加载器收到类加载请求时,首先将加载任务委托给父类加载器,只有当父类加载器无法完成加载时才会尝试自己加载。 这种设计模式的好处在于避免了类的...
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
Java 类加载器是Java运行时环境的一个重要组成部分,它的主要职责是将编译后的字节码(.class文件)加载到JVM中,使得程序能够运行。类加载器的机制保证了类的唯一性,同时也提供了灵活性,允许我们自定义加载逻辑。...
Java类加载器是Java虚拟机(JVM)的关键组成部分,它负责查找并加载类到内存中,使得程序能够运行。自定义Java类加载器允许我们根据特定需求扩展默认的加载机制,例如,从非标准位置加载类或者实现动态加载。在Java...
Java 类加载器是Java虚拟机(JVM)的核心组成部分,它负责将编译后的字节码文件(.class文件)加载到JVM中并转换为运行时的数据结构。Tomcat,作为广泛使用的Java Servlet容器,它自定义了一套类加载机制,以满足Web...
Java 类加载机制是Java技术体系的核心组成部分,它关乎到程序运行时如何找到并加载所需的类。本文主要解析Java类加载的原理,分为三个部分:基础的类加载原理解析、插件环境下的类加载和线程上下文类加载器。 首先...
java类加载器学习三、类加载器的委托模式
Java 类加载原理是Java运行时环境中的核心机制之一,它涉及到类的生命周期、类加载器的层次结构以及类的查找和加载过程。了解这一机制对于深入理解Java平台的工作原理至关重要,尤其是在开发自定义类加载器或者处理...
双亲委派模型是Java类加载器的重要特性之一,它的基本流程是:当一个类加载器收到加载类的请求时,它首先不会自己去尝试加载这个类,而是把请求委托给父类加载器去完成,每个层次的类加载器都是如此。如果父类加载器...
默认情况下,Java虚拟机(JVM)提供了三个内置的类加载器:启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用程序类加载器(Application ClassLoader)。它们按照层次结构工作,...
该文件是JVM中关于类加载机制的知识整理的思维导图,包括类加载机制概述、类加载的生命周期、加载时机、加载过程、类加载、类的初始化和实例化等几个大方面进行了讲解,其中类加载中还对JVM三种预定义类加载器进行了...
在Java编程中,类动态加载是一项重要的技术,它允许程序在运行时根据需要加载新的类,从而提高了灵活性和可扩展性。这篇博客“Java类动态加载(一)——java源文件动态编译为class文件”可能主要探讨了如何在运行时...