什么时候要用static来修饰全局变量?

最近在写项目的时候用到了静态变量
开始的时候很疑惑
为什么这个要用静态变量
什么是静态变量
什么时候用静态变量?


方便起见,以下内容中会将“变量/方法”简称为“变量”或“方法”

static——静态

所谓静态就是在程序运行之前就已经被指定了空间大小

并不是指不会变化
而是指该变量占据的空间不会变化
而变量的值则是可以改变的

可以被全局引用

与非静态的变量不同
静态变量一开始就被指定了内存地址
所以每一个方法/变量都知道这个变量在什么地方
所以静态变量可以在本类中被到处引用(包括非静态方法

不能在静态的方法中引入非静态的变量

正如上文说的
一个静态方法的空间在程序开始之初遍被指定了
这就要求该方法中所有的变量都是静态的
如果有一个变量不是静态的
系统就不知道要给这个变量给多少空间
所以不可以引用非静态变量

不会被实例化

虽然静态变量可以在非静态的方法中被创建
但该静态变量仍是一开始就被创建了的
所有对该变量的操作都会被“记住”
可能“记住”这个词让人很难理解


u=3338095003,3698328966&fm=26&gp=0.jpg


在一个类中
创建了一个全局非静态变量x=5;
该类下有多个方法method_1,method_2,method_3
在运行时method_1输出x并令x=10
接着method_2输出x并令x=20
在method_3中输出x并令x=30
(注:在以上三个方法中x并不是以参数的形式传递的)
那么输出的结果是多少呢?
5,10,5,20,5,30
而开始的时候把x声明为static又是什么情况呢
5,10,10,20,20,30
这就是所谓的"记住"

因为一开始的时候就为x赋予了空间
直到程序结束x的空间才被回收

不同于随时使用随时创建的非静态变量
static的生命是贯穿整个程序的


tips:
静态类的方法是可以被直接引用的
在其他类中要用的时候不需要实例化
比如:

static class CompanyEmployee{//静态类
    public string GetCompanyName(string name) { ... } //没有Static
    public static string GetCompanyAddress(string address) { ... }
}
CompanyEmployee M_CompE = new CompanyEmployee();
String M_string1 =M_CompE.GetCompanyName(M_string2);//直接引用