静态构造器 静态变量 谁先初始化?
2015-07-29 17:05
295 查看
今天 遇到 需要静态构造器中初始化一个静态常量,但是没研究过初始化顺序,导致初始化失败了,在此做个总结。
尝试的结果是 会先初始化静态变量 在初始化静态构造器
静态成员,可以看做“类”这个特殊对象的属性和方法,但是这样理解不好理解。
我们从静态内存分配,可以换个角度理解这个东西。
静态代码,会在程序初始化时就加载到内存中,并且赋值。
我不认为是这样,JIT是在程序初始化的时候就被加载的代码内存区中,但是并不是所有代码都被加载到了执行栈中,执行栈寻找的是Main方法,程序也是从Main开始入口执行的。而静态代码,是在静态代码所在的类,被加载到了执行栈中的时候,会调用静态构造函数初始化,并且只会执行一次。
也就是说这个静态代码是全局的,这个全局是相对于整个应用来说的。也就是说相当于,静态成员就是真个应用的全局成员,效果类似Application一样。而访问静态成员需要通过类才能点出来,这也没有什么,就相当于是个命名空间,只不过多了一级,内部类不也多一级吗?
一点笔记:2015.7.29
尝试的结果是 会先初始化静态变量 在初始化静态构造器
静态成员,可以看做“类”这个特殊对象的属性和方法,但是这样理解不好理解。
我们从静态内存分配,可以换个角度理解这个东西。
静态代码,会在程序初始化时就加载到内存中,并且赋值。
我不认为是这样,JIT是在程序初始化的时候就被加载的代码内存区中,但是并不是所有代码都被加载到了执行栈中,执行栈寻找的是Main方法,程序也是从Main开始入口执行的。而静态代码,是在静态代码所在的类,被加载到了执行栈中的时候,会调用静态构造函数初始化,并且只会执行一次。
也就是说这个静态代码是全局的,这个全局是相对于整个应用来说的。也就是说相当于,静态成员就是真个应用的全局成员,效果类似Application一样。而访问静态成员需要通过类才能点出来,这也没有什么,就相当于是个命名空间,只不过多了一级,内部类不也多一级吗?
一点笔记:2015.7.29
相关文章推荐
- android 代码实现控件之间的间距
- Python动态类型的学习---引用的理解
- [Android]在代码里运行另一个程序的方法
- 肯特·贝克:改变人生的代码整理魔法
- 网页恶意代码的预防
- 土人系列AS入门教程 -- 对象篇
- IE7降低内存和降低CPU的几个技巧
- 高手写的Tracer-Flash代码调试类代码下载
- C#托管堆对象实例包含内容分析
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- CreateWeb.vbs 代码
- 如何高效的使用内存
- DOS下内存的配置
- Lua中编译执行代码相关的函数详解
- XP/win2003下发现1G的内存比512M还慢的解决方法
- javascript asp教程第十一课--Application 对象
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子