💧 J a v a 代码的运行过程 \color{#FF1493}{Java代码的运行过程} Java代码的运行过程💧
🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥
文章目录
- Java代码的运行过程
- 🌊链接
- 🌊初始化
- 🌊类加载
- 🌊双亲委派机制
- 🌊总结
- 🐳结语
理解Java代码的运行过程对于开发者来说非常重要,它可以帮助我们更好地理解Java程序的执行流程和类加载机制。通过深入了解这些概念,我们可以更好地理解Java的工作原理和应用程序的执行过程。
Java代码的运行过程
💧在Java中,当我们运行一个Java程序时,它会经历以下过程:链接
、初始化
、类加载
和双亲委派机制
。让我们逐步了解每个过程的含义和作用。
🌊链接
链接是将Java源代码
转换为可执行代码
的过程。它分为三个阶段:
-
💧验证(Verification):在这个阶段,Java虚拟机(JVM)将检查字节码的合法性和安全性,以确保它不会对系统造成损害。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证。
-
💧准备(Preparation):在准备阶段,JVM为类的静态变量分配内存,并设置默认的初始值。这些变量在此阶段被赋予默认值,如整数类型的变量赋值为0,引用类型的变量赋值为null。
-
💧解析(Resolution):在解析阶段,符号引用被解析为直接引用。符号引用是指用名称来引用类、方法、字段等的方式,而直接引用是指内存地址或偏移量等具体的指针。解析过程可以在编译时进行,也可以在运行时进行。
🌊初始化
初始化
是Java类加载过程的最后一步。当一个类被首次主动使用
时,它将被初始化。初始化阶段主要完成以下任务:
-
💧静态变量赋值:将静态变量按照代码中的赋值语句进行初始化。
-
💧静态代码块执行:如果类中有静态代码块,那么在初始化阶段会执行这些静态代码块。
-
💧执行父类的初始化:如果该类有父类,并且父类还没有被初始化,那么会先初始化父类。
初始化过程
是按照严格的顺序
进行的,保证了每个类的初始化操作是可控的。
🌊类加载
类加载是Java代码运行过程的关键步骤之一。它负责将类的字节码加载到JVM中
,并对其进行解析
、验证
和准备
。类加载过程主要包括以下步骤:
-
💧加载:查找类的字节码,并将其加载到内存中。
-
💧连接:包括验证、准备和解析阶段。
-
💧初始化:执行类的初始化操作。
类加载
过程由类加载器
(ClassLoader)执行,Java中有三种类加载器:启动类加载器
(Bootstrap ClassLoader)、扩展类加载器
(Extension ClassLoader)和应用程序类加载器
(Application ClassLoader)。
-
启动类加载器:负责加载Java核心库,如
rt.jar
。它是Java虚拟机的一部分,由C++实现。 -
扩展类加载器:负责加载Java扩展库,如
ext
目录下的JAR文件。它是由Java编写的,是sun.misc.Launcher$ExtClassLoader
类的实例。 -
应用程序类加载器:也称为系统类加载器,负责加载应用程序的类路径(Classpath)下的类。它是由Java编写的,是
sun.misc.Launcher$AppClassLoader
类的实例。
这三种类加载器按照父子关系形成了一种层次结构,即双亲委派模型
。
🌊双亲委派机制
双亲委派机制是Java类加载器
的一种工作方式
。当一个类加载器接收到加载类的请求
时,它会先将这个请求委派给其父加载器进行处理。只有在父加载器无法找到所需类的情况下,子加载器才会尝试自己加载。
这种机制的好处
在于可以保证类的加载是一种层次结构
,避免了类的重复加载
和冲突
。它的工作流程如下:
-
💧当一个类加载器收到加载类的请求时,首先检查是否已经被加载过。如果已经加载过,直接返回对应的类。
-
💧如果尚未加载过,则将加载请求委派给父加载器。
-
💧父加载器接收到请求后,重复上述过程,直到到达启动类加载器。如果启动类加载器无法加载该类,将返回一个
ClassNotFoundException
异常。 -
💧如果父加载器成功加载了类,将返回对应的类。子加载器收到类后,也会返回给请求者。
通过双亲委派机制,可以确保类的加载是从上到下的层次结构,避免了类的重复加载
和安全性问题
。
🌊总结
Java代码的运行过程包括链接、初始化、类加载和双亲委派机制
。链接阶段
将Java源代码转换为可执行代码,包括验证、准备和解析。初始化阶段
完成静态变量赋值和静态代码块执行等操作。类加载过程
由启动类加载器、扩展类加载器和应用程序类加载器完成,并遵循双亲委派机制
,确保类的加载是一种层次结构。
🐳结语
🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。
🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!
💧参考文献:
- Java Class Loading Mechanism
- Understanding Class Loading in Java
- The Java ClassLoader
- Understanding the Java ClassLoader