0. 引言
这篇文章主要是分析了for语句以及普通变量之间在编译后是如何执行的,其中围绕着一个重点,就是变量赋值、运算都是依赖于局部变量表和操作数栈这两个重要的概念的,而局部变量表和操作数栈都位于jvm中的栈中。通过简单分析字节码执行过程,得知了static变量是会自动加入static代码块中加以赋值的,而全局变量和常量则是在构造函数中赋值的,也就是实例化后才能赋值。
1. 出栈入栈操作
2. 实际代码分析
2.1 源代码
|
|
2.2 使用javap -verbose ClassCode反汇编结果
|
|
2.3 for语句执行图解
3. 分析字节码执行得出的结论
3.1 常量和全局变量的真正赋值是在构造函数中,即在初始化类时,只是为变量分配空间,而真正的赋值是在对象实例化时。
3.2 静态变量编译后会位于静态代码块中。
4. PS:Class文件结构
3.1 版本号
minor major组成jdk版本号
minor:0
major:51
则描述版本号的十六进制是 : 51
则jdk版本为:jdk1.7