一、实例成员
没有被static修饰的成员叫做实例成员。实例成员是属于对象的。通过对象名去访问实例成员。
- 在创建对象的时候,实例成员跟随着对象一起创建在堆中。
- 跟着对象一起创建在堆空间中。
- 有多少个对象,实例成员就有多少份。
- 对象被回收,这个对象中的实例成员就跟随着一起回收。
二、静态成员
被static修饰的成员,叫做静态成员。静态成员是属于类的。通过类名直接访问。
- 当类第一次被访问的时候,就会将这个类下面的所有的静态成员创建在内存当中。
- 静态成员既不在栈也不在堆中。创建在静态存储区。
- 静态成员只创建一次,在类第一次被访问的时候创建。
- 静态成员一旦被创建在静态存储区,那么就不会被回收,直到程序结束。
class Person
{
//静态成员
public static int Age;
//实例成员
public string Name;
}
class Program
{
static void Main(string[] args)
{
//静态成员属于类,直接通过 类名.静态成员 来访问
int age = Person.Age;
//实例成员属于对象,需要通过 对象名.实例成员 来访问
Person p = new Person();
p.Name = "Jack";
}
}
三、静态成员特点
- 只有一份。变量唯一,无论在什么地方访问都是可以访问的
- 一旦创建在静态存储区,就不会被回收,直到程序结束。
当类第一次被访问的时候,该类下面的所有静态的成员都会被加载。实例成员有多少对象,就会创建多少对象。而静态成员只会在静态存储区中创建一次,直到程序退出时才会被释放。
-
静态函数中不能使用非静态成员
成员变量只能将对象实例化出来后 才能点出来使用 不能无中生有
不能直接使用 非静态成员 -
非静态函数可以使用静态成员
四、静态成员的作用
静态变量:常用唯一变量的声明,方便别获取的对象声明
静态方法: 常用的唯一的方法声明 比如 相同规则的属性计算相关函数
五、常量和静态变量
const(常量)
相同点:他们都可以通过类名点出来使用
不同点:
- const必须初始化,不能修改,static没有这个原则
- const只能修饰变量,static可以修饰很多
- const一定是卸载访问修饰符后面的,static没有这个要求
例如public const float G = 9.8f;
六、静态类
-概念:类如果被static修饰,那么这个类就叫做静态类。
- 静态类中的所有成员要求都是静态成员
- 静态类不能创建对象即不能被实例化。因为没有实例成员,就算可以创建对象,也没有任何的实际意义。
- 静态类不能有构造函数
作用:
1.将常用的静态成员写在静态类中 方便使用
2.静态类不能被实例化,更能体现工具类的 唯一性
七、静态构造函数
- 任何类都可以有静态构造函数。
- 静态构造函数不能有访问修饰符,不能带参数。
- 静态构造函数不能被手动调用。类的成员第一次被访问的时候,自动执行。
- 静态构造函数只执行一次,在类的成员第一次被访问的时候自动执行。
static 类名()
{
}
作用:在静态构造函数中初始化 静态变量
总结
静态成员变量:使用static关键字修饰的成员变量
静态成员变量属于类,类被加载时初始化,且只有一份。(饮水机 会议室)
实例成员变量属于对象,在每个对象被创建时(new)初始化,每个对象一份。(杯子 工位)
特点:存在有先于对象,被所有对象所共享,常驻内存
静态类:使用static关键字修饰的类。
不能实例化,只能包含静态成员。
静态类不能被继承,但是静态方法、属性可以被继承
静态构造函数
初始化类的静态数据成员
仅在类被加载是执行一次
不允许使用访问修饰符
适用性:
利:单独空间存储,所有对象共享,可直接被类名调用
弊:静态方法中只能访问静态成员,共享数据被多个对象访问会出现并发。
适用场合:
1.所有对象需要共享的数据
2.在没有对象前就要访问成员
3.工具类是合作静态类(常用,不需要过多数据)。
转载借鉴网址:https://www.cnblogs.com/chenweifeng/p/4716682.html