字节码加载和class实例(静态成员变量对象加载顺序)
来源:互联网 发布:阿莫源码 编辑:程序博客网 时间:2024/05/21 17:46
讨论code 大多数人会认为如果main之后,肯定是先打印出静态代码块内容
如果你也这样认为就错了
要知道当main运行之后
- A. 加载字节码到内存(从上到下加载,此时为加载完整,因为因为静态n还未加载)
- B. 从上到下加载静态方法加载 k->Test t1
当发现Test是要实例的时候执行顺序是:非静态成员变量->非静态代码块->构造
实例化顺序:加载 a j
1:j i=0 n=0 因为k已经加载了所以是0,++k 是先赋值所以就是1[非静态成员变量]
2:代码块 i=1 n=1 [非静态代码块]
构造器:3:t1 i= n=2[构造]
C.加载Test t2, 重复上面步骤456
4:j i=3 n=3
5:代码块 i=4 n=4
构造器:6:t2 i= n=5D.此时加载静态i
7:1 i=6 n=6
E.开始加载最后一个静态变量n=99后开始加载静态代码块
1:静态代码块 i=7 n=99F. 到此字节码加载完成到内存
那么我们如何证明是这样呢?我们来做一个减法!
我们先把需要实例化的静态的成员变量注释掉,然后运行,不出意外的话,只加载了字节码到内存
应该只加载了静态成员变量->静态代码块->静态方法
**总结:
字节码加载 : 静态成员变量->静态代码块->静态方法
类实例化 : 非静态成员变量->非静态代码块->构造**
在本案例中:
字节码加载包含了类实例化,所以导致了静态代码块,要等到两个实例化之后最后执行,也就是我们所想的先加载静态代码块,变成了最后才执行
阅读全文
0 0
- 字节码加载和class实例(静态成员变量对象加载顺序)
- 字节码加载和class实例(静态成员变量对象加载顺序)
- 类加载及对象 成员变量初始化顺序
- java静态变量加载顺序
- 静态与非静态块和变量的加载顺序
- java中静态块和静态变量的加载顺序
- Java的静态变量,成员变量,静态代码块,构造块的加载顺序
- 类加载顺序 Class对象
- android中的类加载和静态成员变量的初始化
- java 中类初始化,构造方法,静态成员变量,静态块的加载顺序
- 静态加载顺序,类static变量也有默认值(不同于C++),普通成员变量直接赋值语句和非静态语句块的执行位置
- java单例静态变量加载顺序
- JAVA中代码顺序,静态块 静态变量,加载顺序!
- 类的加载顺序以及静态成员初始化顺序
- JAVA中静态块、静态变量加载顺序详解
- JAVA中静态块、静态变量加载顺序详解
- tomcat中class和jar加载顺序
- class类的静态和动态加载
- 一个小demo
- 强推!8个可以提高办公效率的PPT技巧
- django常用库
- 朴素贝叶斯法
- (1) 学习SpringBoot 之HelloWorld
- 字节码加载和class实例(静态成员变量对象加载顺序)
- PixHawk学习笔记 之 目录
- Java集合框架源码分析(四)——LinkedHashMap
- PageHelper3.6.3问题
- 下拉框带搜索
- 字节长度与打印格式
- K-means算法进行简单的图像"语义"分割,java
- spring boot guava cache 缓存学习
- Android Comiple线上依赖库制作