首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

JAVA中种的加载及对象初始化顺序

2012-10-29 
JAVA中类的加载及对象初始化顺序????? 前段时间在做单例的时候遇到一个很奇怪的问题,前面已经初始化的参数

JAVA中类的加载及对象初始化顺序

????? 前段时间在做单例的时候遇到一个很奇怪的问题,前面已经初始化的参数,已经有值了,但是等到对象建立却发现值却为null了,随便debug跟踪下看看到底是怎么回事。

???

???解释示例代码如下

?? 测试代码

?

public class XmlMain {/** * @param args */public static void main(String[] args) {                              Demo dd=new Demo();       }}打印结果:调用了构造函数,在构造函数中为DRIVER赋值------类加载初始化属性时,因声明d是一个Demo对象调用了构造函数因此DRIVER为:DRIVER   USERNAME为:null-----构造函数时对象开始产生,非静态的属性被解释demoString=abc执行了类的静态块,在类的静态块里面为USERNAME赋值----类加载时,因DRIVER在d后声明,后经DRIVER声明后值为null   USERNAME为:USERNAME--------类加载时不对非静态的属性进行加载,因此demoString在此不可用调用了构造函数,在构造函数中为DRIVER赋值------产生对象时,因类加载时已经执行过USERNAME初始化,且产生对象又调用了构造函数,因此DRIVER为:DRIVER   USERNAME为:USERNAME-----构造函数时对象开始产生,非静态的属性被解释demoString=abc

?

?

上面的代码基本上可以展示一个类从加载到产生对象的先后顺序,类加载时:静态属性顺序执行到静态代码块,产生对象时按非静态属性到执行构造函数顺序执行,至此一个对象完整产生。

热点排行