静态代码块的执行顺序(类中含有本类对象)
来源:互联网 发布:心动网络 面试时间 编辑:程序博客网 时间:2024/04/29 07:44
public class ExA {private static ExA a = new ExA();static {System.out.println("父类--静态代码块");}public ExA() {System.out.println("父类--构造函数");}{System.out.println("父类--非静态代码块");}public static void main(String[] args) {new ExB();}}class ExB extends ExA {private static ExB b = new ExB();static {System.out.println("子类--静态代码块");}{System.out.println("子类--非静态代码块");}public ExB() {System.out.println("子类--构造函数");}}
</pre><pre name="code" class="java">执行结果:
父类--非静态代码块
父类--构造函数
父类--静态代码块
<pre name="code" class="java">父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
子类--静态代码块
<pre name="code" class="java">父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数
先加载类字节码,静态部分(静态代码快/静态成员变量)随着类的加载而加载,最后在去执行主函数中的代码(即创建对象引用,初始化成员变量等)。在静态部分是顺序执行的,即按照类文件中的代码编写先后顺序执行。
在你的第二段代码中是先有个静态成员变量并初始化了,对象在初始化的过程中会牵扯到非静态代码块和构造函数的执行,接下来才是静态代码快,在接下来就是主函数的执行了。所以会造成先执行非静态代码块,再执行静态代码块的 “假象”。
其实质还是先执行静态部分,再执行创建对象,初始化成员变量等再非静态部分,只是静态成员变量的初始化牵扯到了非静态部分的执行。
类加载执行顺序:类字节码→静态代码块static{...}/静态成员变量→创建对象引用,初始化成员变量
其实说白了 就是先加载类 后加载对象, 而静态部分随着类的加载而加载 优先于主函数
你代码中 把本类对象放到了类的成员位置,作为一个成员变量而存在
使其随着类一起加载,但是对象在类加载的时候尚不存在,为了向前拓宽 该对象的出现时间,所以给他加了一个static。
导致 该对象在加载类的过程中就被一起加载 并初始化了,这个时候的初始化调用了 非静态代码块 和构造函数。
这才出现了非静态出现在静态之前
本质原因还是 对象被作为类的成员随类一起加载了,而静态紧随其后被加载
0 0
- 静态代码块的执行顺序(类中含有本类对象)
- 子父类构造代码块/静态代码块/普通代码块执行顺序....(涉及父类静态中再次创建子类对象的特殊情况)
- 关于类中静态块,静态方法,构造代码块,构造方法的执行顺序
- 父类子类构造方法、静态代码块、非静态代码块的执行顺序
- Java父子类中静态代码块与构造函数的执行顺序
- Java中静态代码块执行顺序
- java中静态代码块的执行顺序
- 父类与子类的静态代码块、代码块、构造方法执行顺序
- java中类/对象的初始化顺序以及静态代码块的使用
- java中类/对象的初始化顺序以及静态代码块的使用
- java中类/对象的初始化顺序以及静态代码块的使用
- 举例说明java中静态代码块、非静态代码块、构造函数的执行顺序
- Java中静态代码块、非静态代码块和构造函数的执行顺序
- JAVA继承关系中静态代码块、非静态代码块的执行顺序
- Java中静态代码块、非静态代码块、构造函数的执行顺序与作用
- java中静态代码块,非静态代码块,构造函数之间的执行顺序
- JAVA继承关系中静态代码块、非静态代码块,构造函数的执行顺序
- java继承关系中静态代码块、非静态代码块的执行顺序
- android中一种不常见的函数调用方式
- KMP算法解析
- GDB学习
- Fleury算法 hihoCoder1181 欧拉路·二
- meanshift算法
- 静态代码块的执行顺序(类中含有本类对象)
- C语言文件路径问题(一)
- [leetcode] Valid Palindrome
- 花生壳域名ping不通怎么办
- 自定义标签开发
- [转载]深入理解java异常处理机制
- Mac 安装GCC(不使用Xcode)MacPort
- LeetCode_Convert Sorted Array to Binary Search Tree
- OCulus Rift 游戏开发六原则