浏览 2791 次
锁定老帖子 主题:静态函数在类对象初始化时的执行顺序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-20
最后修改:2009-05-20
静态构造函数和实例化对象时的构造函数有什么区别,它们的关系又是什么呢? 请看下面这个例子。 class Statics { public static int count = 0; static //Statics() { count++; System.out.println("In static:" + count); } public Statics() { count++; System.out.println("In constructor:" + count); } public static void main(String[] args) { Statics o1 = new Statics(); Statics o2 = new Statics(); } } 输出: E:\Java\puzzle_code>java Statics In static:1 In constructor:2 In constructor:3 1、静态成员的初始化语句会早于静态构造函数(Java中貌似没有)执行 2、在.Net中静态构造函数是由CLR调用执行的,所以静态构造函数只能是一个,同时不能还有 参数。那么静态构造函数相对于成员初始化的一些弊端都不复存在。 在Java中貌似没有静态构造函数这一说,但是有静态初始化函数。 分析此类问题,只要记住三点就行了: 1. 代码的执行顺序,代码在前的先执行; 2. 静态成员初始化语句要先于静态构造函数执行; 3. 静态成员初始化语句与静态构造函数只执行一次。 更多参考(援引别人关于C#静态函数的总结): 一个类的static构造函数在给定的应用程序域中仅执行一次。static构造函数由在应用程序域的下列事件的首次发生时触发: 1)该类的实例被创建。 2)任何一个static成员被引用 3)如果类包含执行入口Main方法,此类的static构造函数在Main方法被调用之前执行。 4)如果类包含任何staic成员,则这些static成员在static构造函数之前进行初始化。 5)如果类包含任何static方法,则这些static方法在static构造函数之后进行初始化。 6)对于存在多个static成员,他们的初始化将按照文本顺序进行,不会因为调用顺序而改变。 偶对这个问题的理解可能不准确,欢迎大家拍砖。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |