Java笔记中已经有关于静态的说明,C#学习中,再次记录下。

同一静态变量或方法,共享内存,共用同一块内存区域。其值会被多个对象改变。

可以理解为,盒子中只有一个苹果,张三咬了一口,李四从此盒子中拿取苹果时,是被咬过的苹果。

同一命名空间下的所有类都可以使用或改变全局静态变量,它只保留最新值。如在类GlobalVariable中定义了public static string Result,那么在其他类中可以GlobalVariable.Result="最新值",或使用GlobalVariable.Result。

静态变量先按顺序分配内存,全部分配完后,再按顺序赋值。(两轮)

分配内存时:整型数据默认值为0,单精度数据为0.0f,双精度数据为0.0,布尔型数据为False,引用型数据string为null。

new类的对象时,这个类内的所有变量已赋值完毕

class class1
    {
        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 class1().j); //对象.非静态变量
            Console.Read();
        }
    }

以上代码过程如下:

1、静态变量由上到下先初始化,i,num都为0,静态方法getNum返回的num=0。

2、静态变量由上到下赋值,i等于getNum方法的返回值0,num=1,静态方法getNum返回的num=1

3、new class1()后,class1中的量,都已赋值完毕。即此时j=1

所以最终,i=0,j=1

【实例】静态方法只能被创建一次(内存唯一),非静态方法可被多次创建。

静态、构造方法_静态

namespace ConsoleApplication1
{
    class Program
    {
        static Program() //构造方法
        {
            Console.WriteLine("静态方法");
        }
        private Program() //构造方法
        {
            Console.WriteLine("非静态方法");
        }
        static void Main(string[] args)
        {
            Program p1 = new Program() ;
            Program p2 = new Program();
            Program p3 = new Program();
        }
    }
}

关于构造方法:方法名与类名相同的方法被称作构造方法。

特点如下:

1、没有返回类型,甚至连void也没有。

2、构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。

3、构造方法在创建对象时自动执行,一般不能显式地直接调用。

4、每个类可以有零个或多个构造方法。

5、不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。

 

【参考】

C#中的static静态变量的用法

面向对象(静态变量和成员变量的区别)