java静态初始化块、普通初始化块、构造器执行顺序
来源:互联网 发布:高级sql编程 编辑:程序博客网 时间:2024/05/20 11:37
下面以代码+运行结果+原因描述的形式来说明该执行顺序:
代码:
package test;class Root { static { System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参构造器"); }}class Mid extends Root { static { System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参构造器"); } public Mid(String msg) { this(); System.out.println("Mid的带参构造器,其参数值: " + msg); }}class Leaf extends Mid { static { System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { super("我是一只可爱的参数"); System.out.println("Leaf的无参构造器执行"); }}public class test { public static void main(String[] args) { new Leaf(); new Leaf(); }}
截图:
描述:
1.一旦Leaf类初始化成功后,Leaf类会在该虚拟机里一直存在,因此第二次创建Leaf实例时,无需再次对Leaf类进行初始化。
2.系统在类初始化阶段,会先执行最顶层父类的静态初始化块,然后一次向下,直到执行当前类的静态初始化块。
3.对象初始化阶段,(如果调用到最上层的构造器,则)会先执行最顶层父类的初始化块、构造器,然后向下依次执行被调用的父类的初始化块、构造器..最后才执行Leaf类的初始化构造器。
参考:疯狂java讲义,请勿随意复制转载
0 0
- java静态初始化块、普通初始化块、构造器执行顺序
- 静态初始化块,普通初始化块,构造器的执行顺序
- JAVA静态初始化块,初始化块,构造器调用顺序
- Java中的初始化顺序(静态成员、静态初始化块,普通成员、普通初始化块、构造函数)
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器
- Java类的初始化顺序 (静态变量、静态初始化块、变量、初始化块、构造器)
- java的初始化块、静态初始化块、构造函数的执行顺序及用途探究
- java的初始化块、静态初始化块、构造函数的执行顺序
- 变量初始化,构造代码块,静态代码块,执行顺序
- 父类子类的静态初始化块,初始化块,构造器执行顺序
- 父类子类的静态初始化块,初始化块,构造器执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
- 紫书第一章训练1 D -Message Decoding
- MindManager——做计划、策划的最佳工具之一!
- 计算机视觉与图像处理方面的顶级期刊
- 【LeetCode刷题记录】7.Reverse Integer
- Android上SQLite的基本应用(一)
- java静态初始化块、普通初始化块、构造器执行顺序
- ng-message 表单验证
- python数据分析学习资料
- 深入了解Windows句柄到底是什么
- [LeetCode]442. Find All Duplicates in an Array
- json,字符串, 对象转换
- 堆与栈
- Android--通过Intent使用Bundle如何传递对象
- MySQL 服务无法启动 或 启动慢