您的位置:首页 > 编程语言 > Java开发

Java类初始化顺序

2010-10-20 18:12 176 查看
原创作品,转载请注明出自xelz's blog

博客地址:http://mingcn.cnblogs.com/

本文地址:http://mingcn.cnblogs.com/archive/2010/10/20/JavaClassInitOrder.html

Java技术笔试及面试中常出的问题,我们总结一下

直接看例子:

 args) throws Exception{
new ExtendedClass()]

执行结果

BaseClass:Static Initialization Block BaseClass:Static Variable ExtendedClass:Static Variable ExtendedClass:Static InitializationBlock BaseClass:Variable BaseClass:Initialization Block BaseClass:Constructor ExtendedClass:Initialization Block ExtendedClass:Variable ExtendedClass:Constructor
可以看出,在创建一个子类对象时,执行顺序是
父类静态初始化块及静态成员变量 子类静态初始化块及静态成员变量 父类非静态初始化块及非静态成员变量 父类构造函数 子类非静态初始化块及非静态成员变量 子类构造函数
而关于同为静态(或非静态)的初始化块和成员变量执行的先后顺序是怎样呢, 仔细看例子就可以看出,例子中既有初始化块在成员变量之前,也有成员变量在初始化块之前的情况 运行结果是按源代码书写顺序执行 其实下面的两种书写方式是等价的 class test { static type t; static { someMethod(); } } //二者等价 class test { static { type t; someMethod(); } }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: