最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
静态变量和非静态变量的区别
2015年02月11日 10:26
0 点赞
0 评论
更新于 2025-11-21 16:13
在编程中,静态变量和非静态变量有着不同的特性和使用场景。下面我们通过具体的代码示例和详细的分析来探讨它们之间的区别。
代码示例
A 窗体类
// 定义列表为全局静态变量
public static List<string> Data = new List<string>(100);
B 窗体类
// 访问列表值
foreach (string n in aaa)
{
Console.WriteLine(A.Data[n]);
}
静态变量与非静态变量的区别
1. 内存分配
- 静态变量:在应用程序初始化时,静态变量就会被分配内存并存在于内存当中,直到它所在的类的程序运行结束时才会从内存中释放。这意味着在整个应用程序的运行期间,静态变量始终占据着一定的内存空间。
- 非静态变量:需要在类被实例化后才会分配内存。每个实例都会拥有自己独立的非静态变量副本,当实例被销毁时,其对应的非静态变量所占用的内存也会被释放。
2. 生存周期
- 静态变量:其生存周期与应用程序的存在周期一致。只要应用程序在运行,静态变量就一直存在,并且保持其状态。
- 非静态变量:其存在周期取决于实例化的类的存在周期。当类的实例被创建时,非静态变量随之产生;当实例被销毁时,非静态变量也会消失。
3. 调用方式
- 静态变量:只能通过“类.静态变量名”的方式进行调用,类的实例不能直接调用静态变量。这是因为静态变量是属于类本身的,而不是属于某个具体的实例。
- 非静态变量:当该变量所在的类被实例化后,可通过实例化的类名直接访问。每个实例都可以独立地访问和修改自己的非静态变量。
4. 共享方式
- 静态变量:是全局变量,被所有类的实例对象共享。也就是说,一个实例改变了静态变量的值,其他同类的实例读到的就是变化后的值。这使得静态变量可以在不同的实例之间传递数据。
- 非静态变量:是局部变量,每个实例都有自己独立的非静态变量副本,不共享。不同实例对非静态变量的修改不会相互影响。
5. 访问方式
- 静态成员:不能访问非静态成员。这是因为静态成员在类加载时就已经存在,而此时可能还没有创建类的实例,非静态成员也就不存在。
- 非静态成员:可以访问静态成员。因为非静态成员是在类的实例创建后才存在,此时静态成员已经存在于内存中,可以被访问。
通过以上的分析,我们可以清楚地了解静态变量和非静态变量的区别,在实际编程中根据具体的需求选择合适的变量类型。