Java程序初始化过程
2016-08-25 15:27
218 查看
java程序初始化执行顺序:
父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造函数 ->子类非静态变量 -> 子类非静态代码块 -> 子类构造函数
结果为:
1 . 类加载器加载该类
2 . 链接:
a. 检查
b. 准备:对 t1 和 t2 赋初始值 null
c. 解析
3 . 初始化:new 两个 B对象,并赋值给t1和t2。 此时t1和t2才赋予我们设置的真实值。
在new一个B对象时,由于代码中存在非静态代码块,而非静态代码块只是在new一个对象时执行一次,不是随类加载而加载的。
因此,先打印两次 构造块
接着类加载执行静态代码块,即打印 静态块
然后在程序入口方法main()中又创建了一个B类型对象,故再次打印 构造块
父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造函数 ->子类非静态变量 -> 子类非静态代码块 -> 子类构造函数
例
public class B { public static B t1 = new B(); public static B t2 = new B(); { System.out.println("构造块"); } static { System.out.println("静态块"); } public static void main(String[] args) { B t = new B(); } }
结果为:
构造块 构造块 静态块 构造块
解析
根据上一篇文章类的加载过程 以及 本篇文章类初始化顺序可以很容易得出结论。1 . 类加载器加载该类
2 . 链接:
a. 检查
b. 准备:对 t1 和 t2 赋初始值 null
c. 解析
3 . 初始化:new 两个 B对象,并赋值给t1和t2。 此时t1和t2才赋予我们设置的真实值。
在new一个B对象时,由于代码中存在非静态代码块,而非静态代码块只是在new一个对象时执行一次,不是随类加载而加载的。
因此,先打印两次 构造块
接着类加载执行静态代码块,即打印 静态块
然后在程序入口方法main()中又创建了一个B类型对象,故再次打印 构造块
相关文章推荐
- java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下:
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- Java程序初始化过程中方法覆盖问题
- 黑马程序员——Java程序的初始化过程详解
- Java 程序初始化过程详解 -转
- 举例说明一个 java程序的加载,初始化以及运行过程
- java程序初始化过程
- JAVA程序初始化的过程
- 一个Java小程序,帮助理解Java继承中的初始化过程
- java程序初始化过程详解
- 解析Java类和对象的初始化过程
- Java小知识 对象创建和初始化过程,堆:栈区别
- 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程。
- 一个Java程序的执行过程
- Java:对象创建和初始化过程
- Java程序初始化顺序
- 子类的创建及初始化过程_Thinking in Java(4)_读书笔记(1)
- [转]JAVA中对象创建和初始化过程
- java对象初始化过程