itkui

年少为何不轻狂!

对象的构造和初始化

昨天看到BlueIce的一个post,诡秘的Java构造问题。里面有一句话:“关于构造函数的作用以及类的构造问题,而这是初学者经常会犯甚至是有经验的程序员偶尔也会犯的错误”。里面所提到问题的可以归结为对象初始化问题。
我想避免此类问题出现的最佳方法是将对象的构造和初始化过程进行总结、概念化。这样,即使出现问题也可以按照这个规律一步一步的找到问题的所在。

对象的初始化操作将递归如下的步骤进行:
1.设置实例变量的值为缺省的初始值(0,false,null),不同的数据类型有不同的初始值。
2.调用类的构造器(但是还是没有执行构造方法体),绑定构造器函数。
3.如果构造器中有this()调用,则根据this()调用的参数调用相应的重载构造器,然后,转到步骤5;否则转到步骤4。
4.除java.lang.Object类外,调用父类中的初始化块初始化父类的属性,然后调用父类构造器,如果在构造器中有super()调用,则根据super()中的参数调用父类中相应的构造器。
5.使用初始化程序和初始化块初始化成员。
6.执行构造器方法体中其他语句。

容易出现问题的地方:虽然变量在定义的时候进行了初始化,在实际初始化过程中还是先将其设为1所示默认值,然后在过程5才会真正的进行初始化。如果在这里调用了父类构造器的话,如果父类构造器中有相同变量的默认初始化的话(Java的动态绑定机制),就极为有可能出现问题。而这时候出现的问题通常难以察觉。

posted on 2007-07-05 13:07 itkui 阅读(1054) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

留言簿(1)

随笔档案(24)

收藏夹(15)

好站珍藏

学习资源

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜