【Java代码的运行过程】 ——每天一点小知识

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。【Java代码的运行过程】 ——每天一点小知识,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述

                                                                              💧

J

a

v

a

代码的运行过程

\color{#FF1493}{Java代码的运行过程}

Java代码的运行过程💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥



    理解Java代码的运行过程对于开发者来说非常重要,它可以帮助我们更好地理解Java程序的执行流程和类加载机制。通过深入了解这些概念,我们可以更好地理解Java的工作原理和应用程序的执行过程。


Java代码的运行过程

    💧在Java中,当我们运行一个Java程序时,它会经历以下过程:链接初始化类加载双亲委派机制。让我们逐步了解每个过程的含义和作用。

在这里插入图片描述

🌊链接

    链接是将Java源代码转换为可执行代码的过程。它分为三个阶段:

  1. 💧验证(Verification):在这个阶段,Java虚拟机(JVM)将检查字节码的合法性和安全性,以确保它不会对系统造成损害。验证过程包括文件格式验证、元数据验证、字节码验证和符号引用验证

  2. 💧准备(Preparation):在准备阶段,JVM为类的静态变量分配内存,并设置默认的初始值这些变量在此阶段被赋予默认值,如整数类型的变量赋值为0引用类型的变量赋值为null

  3. 💧解析(Resolution):在解析阶段,符号引用被解析为直接引用符号引用是指用名称来引用类、方法、字段等的方式,而直接引用是指内存地址或偏移量等具体的指针。解析过程可以在编译时进行,也可以在运行时进行。

在这里插入图片描述

🌊初始化

    初始化是Java类加载过程的最后一步。当一个类被首次主动使用时,它将被初始化。初始化阶段主要完成以下任务:

  1. 💧静态变量赋值:将静态变量按照代码中的赋值语句进行初始化。

  2. 💧静态代码块执行如果类中有静态代码块,那么在初始化阶段会执行这些静态代码块。

  3. 💧执行父类的初始化如果该类有父类,并且父类还没有被初始化,那么会先初始化父类

    初始化过程按照严格的顺序进行的,保证了每个类的初始化操作是可控的。

🌊类加载

    类加载是Java代码运行过程的关键步骤之一。它负责将类的字节码加载到JVM中,并对其进行解析验证准备。类加载过程主要包括以下步骤:

  1. 💧加载:查找字节码,并将其加载到内存中。

  2. 💧连接:包括验证准备解析阶段。

  3. 💧初始化:执行类的初始化操作

类加载过程由类加载器(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类加载器的一种工作方式。当一个类加载器接收到加载类的请求时,它会先将这个请求委派给其父加载器进行处理。只有在父加载器无法找到所需类的情况下,子加载器才会尝试自己加载。

这种机制的好处在于可以保证类的加载是一种层次结构,避免了类的重复加载冲突。它的工作流程如下:

  1. 💧当一个类加载器收到加载类的请求时,首先检查是否已经被加载过如果已经加载过,直接返回对应的类

  2. 💧如果尚未加载过,则将加载请求委派给父加载器

  3. 💧父加载器接收到请求后重复上述过程直到到达启动类加载器。如果启动类加载器无法加载该类,将返回一个ClassNotFoundException异常。

  4. 💧如果父加载器成功加载了类,将返回对应的类。子加载器收到类后,也会返回给请求者

通过双亲委派机制,可以确保类的加载是从上到下的层次结构,避免了类的重复加载安全性问题
在这里插入图片描述

🌊总结

    Java代码的运行过程包括链接、初始化、类加载和双亲委派机制链接阶段将Java源代码转换为可执行代码,包括验证、准备和解析。初始化阶段完成静态变量赋值和静态代码块执行等操作。类加载过程由启动类加载器、扩展类加载器和应用程序类加载器完成,并遵循双亲委派机制,确保类的加载是一种层次结构。


在这里插入图片描述


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!

💧参考文献:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159768.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!