java类加载过程详解_java三个类加载器

java类加载过程详解_java三个类加载器朋友给我发了一道有意思的题目,如下为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢,原因很简单,就是类加载过程的不同。这就扯到基础理解上了,就是Java是如何加载一个类的呢?上图是我绘制的整个Java类加载过程。首先是编译期,将Java源文件也就是敲好的代码通过编译,转换成.class文件,也就是字节码文件(byte),然后经过传输传…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

朋友给我发了一道有意思的题目,如下

java类加载过程详解_java三个类加载器

为什么用.class的方式加载类和以Class.forName()的方式加载的结果不同呢,原因很简单,就是类加载过程的不同。

这就扯到基础理解上了,就是Java是如何加载一个类的呢?

java类加载过程详解_java三个类加载器

上图是我绘制的整个Java类加载过程。

首先是编译期,将Java源文件也就是敲好的代码通过编译,转换成.class文件,也就是字节码文件(byte),然后经过传输传给类加载器,传输的是刚转换好的字节码文件,也可以是通过网络传输过来的字节码文件,这个是分布式架构下的情况。

然后就是运行期,运行期一开始,类加载器初始化字节码文件,通过本地类库来验证字节码文件的正确性,然后交给JVM的解释器和即时编译器,最后汇合给JVM内部的Java运行系统,都ok了后传给PC的操作系统,最后就是物理硬件层面。

所以问题的答案就有了java类加载过程详解_java三个类加载器

.class是JVM将类装入内存,是在编译期间实现的,而编译期间只是做了字节码转换,所以不执行静态块

而class.forName()除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。当然还可以指定是否执行静态块。

java类加载过程详解_java三个类加载器

扫码关注我的微信公众号:Java架构师进阶编程  获取最新面试题,电子书

专注分享Java技术干货,包括JVM、SpringBoot、SpringCloud、数据库、架构设计、面试题、电子书等,期待你的关注!

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169718.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • getParameter方法的用法[通俗易懂]

    getParameter方法的用法[通俗易懂]html核心代码<body><fontsize=”5″color=”blue”>圆面积计算</font><br><formaction=”home/CCarea”method=”post”> 请输入半径r:<inputtype=”text”name=”radius”v…

    2022年9月5日
  • 解决导入MySQL数据库提示”Unknown character set: ‘utf8mb4′”错误

    解决导入MySQL数据库提示”Unknown character set: ‘utf8mb4′”错误

    2021年10月7日
  • spark streaming 滑动窗口

    spark streaming 滑动窗口滑动窗口DStream.window(windowlength,slidinginterval) batchinterval:批处理时间间隔,sparkstreaming将消息源(Kafka)的数据,以流的方式按批处理时间间隔切片,一个批处理间隔时间对应1个切片对应生成的1个RDDwindowlength:窗口时间长度,每个批处理间隔将会实际处理的RDD个数(1…n…

    2022年6月23日
  • 写给新入IT的新人们

    写给新入IT的新人们

    2021年11月23日
  • Qt5.7 + VS2015 环境搭建「建议收藏」

    Qt5.7 + VS2015 环境搭建「建议收藏」简述之前介绍过Qt5.x的环境搭建,5.7开始支持VS2015,为了使用新的开发环境(典型的强迫症),不得不再次进行Qt5.7+VS2015的环境搭建。除了之前介绍的搭建细节之外,其实中间有很多需要注意的部分。下面,主要分享搭建过程以及其中需要注意的一些事项。简述安装VS2015安装Qt57配置QtCreator配置编译器配置调试器HelloWorldVS20

    2022年5月16日
  • Java 异常错误 (Ljava/lang/String;)L java/lang/String;「建议收藏」

    Java 异常错误 (Ljava/lang/String;)L java/lang/String;「建议收藏」异常问题如下:起初xml中返回值类型是这样子,一直在找返回值类型的问题,怎么看都是没有问题的又改为如下,结果还是不对,查询资料反反复复还是出现这个异常突然一下想到会不会是有重复id名字的sql 我用的是idea,直接全局查询,确实查到了一模一样在别的包下的sql,因为我项目是maven的子工程,就给冲突了;最后还是冒着尝试想法去试了一下,把名字一个,哦吼!美滋滋 问题解决 不在报错以后开发还是需要多注意名字重复的问题的!…

    2022年8月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号