zoukankan      html  css  js  c++  java
  • c#静态变量赋值问题

    class Program
        {
            static int i = getNum();
            int j = getNum();
    
            static int num = 1;
    
            static int getNum()
            {
                return num;
            }
    
            static void Main(string[] args)
            {
                Console.WriteLine("i={0}", i);
                Console.WriteLine("j={0}", new Program().j);
                Console.Read();
            }
    
        }
    //输出值为
    i=0
    j=1

    分析上面的代码

      Console.WriteLine("i={0}", i);

      这里 i 是 static 变量,在类 Program  第一次被加载时,要先为 Program  里面所有的 static 变量分配内存。尽管现在有超线程技术,但是指令在逻辑上还是逐条的按顺序自上而下执行,所以 先为 static int i 分配内存,并且在该内存中保持int的缺省值0,接着再为 static int num 变量分配内存,值当然也为0。

      然后第二步,为变量赋值:先为 static int i 变量赋值,i=getNum(),看 getNum() 里面的代码,就是return num,这个时候 num 的值是 0 ,于是 i=0 。然后对变量num赋值,num=1;这行代码执行后,num就为1了。所以,j=1。

      所以最后的结果为:

       i=0 j=1

      注意:

      当类第一次被加载时,会对类中的静态变量先按顺序进行分配内存空间,当全部分配完内存空间之后,在对静态变量按顺序赋值。

      首先分为两部分 寄存器和内存(包括缓存)

      内存分为两部分 代码和数据

      数据分为两部分 静态存储区和运行时存储

      运行时存储分为 堆栈 和 堆
      静态存储分为 全局静态存储 和 常量

  • 相关阅读:
    持续集成系统敏捷开发的基石
    云计算对IT产业的影响
    类封装的驱动程序
    竹林蹊径:深入浅出Windows驱动开发
    云计算的SPI服务模型
    什么是云计算
    多态
    我们需要什么样的计算
    电子工业的发展也带动了电子设计自动化技术
    云计算的部署模型
  • 原文地址:https://www.cnblogs.com/raorao1994/p/8203033.html
Copyright © 2011-2022 走看看