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

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

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

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

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

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

所以问题的答案就有了

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

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

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

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

Java类加载过程图解相关推荐

  1. 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC

    36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...

  2. Java类加载过程内存分析

    Java类加载过程内存分析 Java类加载过程 编译 类的加载 类加载器 运行时数据区 执行引擎 Java类加载过程 具体过程如下: 编译 首先Java源代码会被编译器编译成class文件以供计算机执 ...

  3. java 类加载过程

    1. 使用命令行查看类加载过程,在eclipse测试类的run configuration中配置-verbose:class或者-verbose,如下图所示: 运行结果如下所示: [Opened D: ...

  4. java类加载过程_面试官:java类的加载过程

    Java 类加载机制 类从被加载到JVM中开始,到卸载为止,整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段. 其中类加载过程包括加载.验证.准备.解析和初始化五个阶段. 类的加载 ...

  5. java类加载过程(双亲委派机制)

    类加载运行全过程 通过Java命令执行代码的大体流程如下: 其中loadClass的类加载过程有如下几步: 加载 >> 验证 >> 准备 >> 解析 >> ...

  6. Java类加载过程、为什么会出现JVM?

    目录 为什么会出现JVM? 编译和执行阶段(类加载过程) 编译阶段 主要的作用是什么? 编译的过程有哪些? 执行阶段 为什么会出现JVM? 我们学习Java的时候总是会听到这样一句话:Java程序可以 ...

  7. Java类加载过程详解

    类的生命周期 类的加载 类加载过程 加载 链接 验证 准备 解析 初始化 总结 首先我们先简单了解一下整个JVM的体系结构是怎样的,如下图所示(图1): 再详细具体一点(图2): 上面的图片有些地方看 ...

  8. java类加载过程,双亲委派机制

    1.双亲委派机制 Parent Delegation Model 又称为父级委托模型.想要了解它,还需理解类加载机制.类加载器.类加载器的层级关系. 2.类加载机制: 编译器把Java源文件编译成.c ...

  9. java类加载过程_java类的加载过程

    在这本书里面,在讲到类初始化的五种情况时,提及了一个比较有趣的事情.先来看看下面的代码 public class SubClass { static{ System.err.println(" ...

最新文章

  1. 从世界数字大脑形成看元宇宙未来趋势
  2. 商人过河 java_商人过河问题(二)java实现
  3. lastpass安卓最新版_LastPass
  4. STM32开发 -- 启动流程
  5. 低延时直播与RTC融合架构设计②:直播与RTC低延时方案
  6. php for循环in的用法,JavaScript中for in循环是如何使用的?需要注意些什么?
  7. 众安每秒3.2万张保单的背后,阿里云输出了什么能力?
  8. VS2010给Activex添加接口
  9. 主函数中冒泡法 VS 自定义函数选择法
  10. 【珍藏版】长文详解python正则表达式
  11. 操作系统银行家算法(课程设计报告)JAVA实现
  12. 一看就能学会的H5视频推流方案
  13. matlab符号函数sgn,latex 符号函数sgn
  14. Linux为sh脚本文件添加执行权限
  15. Java开发的发展前景和未来规划方向
  16. git系列之-放弃修改
  17. 1.1.3 NetBIOS编程基础(1)
  18. html5多媒体事件写法,多媒体元素重要事件 -HTML5
  19. Java学习笔记-IO
  20. 提取动漫视频里的BGM

热门文章

  1. 使用WSL开发Linux环境下的Python——python环境安装
  2. 网络编程之Netty(网络通信框架)的基础篇
  3. 5G服务化接口和参考点
  4. 浅谈服务化和微服务化(上)
  5. 基于Echart实现的梯形折线图
  6. Android IT新闻阅读器与手机二维码
  7. oracle 下载 地址,Oracle各版本下载地址
  8. Spring实战(Spring起步)
  9. 3年工作经验的华为Java工程师分享程序员应该具备的技能
  10. 精益数据分析 - 第3章 你把生命献给谁