static关键词

static:静态

静态可以分为很多种

这里以面向对象和面向过程来划分

面向对象

静态成员变量:

class Mystatic {
public:
	int show_sta() { return sta; }
private:
	int a, b, c;
	static int sta;       //静态成员变量的声明
};

int Mystatic::sta = 10;      //静态成员变量的定义

静态成员变量于普通的成员变量来说有很多特点

1.静态成员变量为类内所有对象共享,不同于其他成员变量在每一个对象中都有一份拷贝,所有对象都可以操控静态成员函数。

举例:

#include <stdio.h>

void fn(void)
{
    int n = 10;

    printf("n=%d\n", n);
    n++;
    printf("n++=%d\n", n);
}

void fn_static(void)
{
    static int n = 10;

    printf("static n=%d\n", n);
    n++;
    printf("n++=%d\n", n);
}

int main(void)
{
    fn();
    printf("--------------------\n");
    fn_static();
    printf("--------------------\n");
    fn();
    printf("--------------------\n");
    fn_static();

    return 0;
}


-> % ./a.out 
n=10
n++=11
--------------------
static n=10
n++=11
--------------------
n=10
n++=11
--------------------
static n=11
n++=12

2.因为静态成员变量是独立于对象外的,所以类为其单独开辟一块内存,所以静态成员变量必须初始化且必须在类外初始化(这里刚好与C++关于初始化的定义相结合----------------对于内置类型的变量若没有被显式初始化(我的理解就是初始化赋值),那么在定义于函数体之外的变量将被初始化为0),所以未在类外初始化赋值的静态成员变量将自动被赋值为0

3.静态成员变量存储在全局数据区,即程序消亡才被收回内存,且无需类的实例也可对其操作

4.静态成员变量于全局变量的功能其实很相似,但是静态成员变量还有一个全局变量没有的特性,那就是对其他文件不可见,也就是不会于其他文件的相同名字的函数或变量相冲突

静态成员函数:

和静态成员变量一样,静态成员函数是为类服务,而不是为对象服务的,所以静态成员函数可以调用静态成员变量,但是无法调用非静态成员变量,因为非静态成员变量是基于对象的,没有对象,非静态成员变量也不会分配内存,也就根本不存在

其次因为独立于对象,所以没有this指针

面向过程

静态全局变量

1.该变量在全局数据区分配内存;

2.未经初始化的静态全局变量会被程序自动初始化为0(自动变量的自动初始化值是随机的);

3.静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;

静态局部变量

1.静态局部变量在全局数据区分配内存;

2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;

3.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Static关键词可以用来修饰变量、函数和类。当用于变量时,它表示该变量只在定义它的文件中可见;当用于函数时,它表示该函数只能在定义它的文件中调用;当用于类的成员变量时,它表示该成员变量是该类的所有实例共享的;当用于类的成员函数时,它表示该函数不需要通过类的实例来调用,可以直接使用类名调用。 ### 回答2: Static关键词在编程中有多种用途。 1. 静态变量(Static Variables):静态变量是在类中声明的变量,但与实例对象无关。它们在类被加载时分配内存,不会随着实例对象的创建而改变。静态变量在不同实例对象之间共享,并且可以通过类名直接访问。 2. 静态方法(Static Methods):静态方法是在类中声明的方法,与实例对象无关,无法访问非静态成员。它们可以直接通过类名调用,而无需创建对象。静态方法在程序运行期间只有一个实例,通常用于执行与类相关的操作,如工具类的方法。 3. 静态块(Static Blocks):静态块是在类中声明的代码块,用于在类被加载时执行特定的操作。静态块在任何静态成员(变量或方法)之前被执行,常用于初始化静态变量或执行一些静态操作。 4. 静态导入(Static Import):静态导入用于在类中直接使用其他类或接口的静态成员,而无需使用类名或接口名来访问。通过使用import static语句,可以导入指定类或接口的静态成员,使代码更加简洁易读。 在使用Static关键词时需要注意以下几点: - Static成员不依赖于实例对象,因此不能在静态方法中访问非静态成员。 - 静态变量和静态方法被所有实例对象共享,修改一个实例的静态成员会影响到其他实例。 - 静态方法不能被覆盖(Override),只能被隐藏(Hide)。 - 静态块在类加载时只执行一次,并且按照出现的先后顺序执行。 - 静态导入应谨慎使用,过多的静态导入可能导致代码不易读。 - 在多线程环境下使用静态变量或方法时需考虑线程安全性。 总之,Static关键词提供了一种在类级别上操作数据或执行操作的方式,它在代码的设计和优化中起着重要的作用。 ### 回答3: Static关键词在编程中有着重要的作用。 首先,Static可以修饰类的成员变量,使其成为静态变量。通过使用静态变量,我们可以在不创建类的实例对象的情况下直接访问这些变量。静态变量在内存中只有一份拷贝,无论创建了多少个类的实例对象,它们都共享同一份静态变量,方便数据的共享和操作。 其次,Static可以修饰类的成员方法,使其成为静态方法。静态方法在调用时不需要实例化对象,可以直接通过类名来调用。与静态变量类似,静态方法也是与类的实例对象无关的,不可以在静态方法中使用this关键字,只能访问静态成员。 另外,Static还可以用于静态块和静态内部类。静态块是在类加载时执行的一段代码块,常用于初始化静态变量,例如连接数据库等操作。静态内部类是在类中使用Static修饰的内部类,与类的实例对象无关,可以直接通过类名访问。 总结来说,Static关键词可以用于修饰类的成员变量、成员方法、静态块和静态内部类,它们都与类的实例对象无关,可以直接通过类名来访问。静态成员可以实现数据的共享和调用的便捷,但需要注意静态成员的生命周期和其它限制条件的使用。因此,在编程过程中,我们应根据实际需求合理利用Static关键词的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值