static关键字的作用 C中static的作用 修饰一:静态局部变量 在修饰局部变量的时候,初始化局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。如果未对其初始化,系统会对默认初始化0或\0;
修饰二:静态全局变量 这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。其他文件中也可以定义和该变量一样的名字且不会冲突;
修饰三:静态函数 和静态全局变量一样,只能在该文件中被调用,其他文件不能调用。
C++中static的作用 C++中static的作用除了具有C中的作用之外还具有以下作用:
修饰一:静态数据成员 1、静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间; 2、静态数据成员可以被初始化,但是只能在类体外进行初始化,若未对静态数据成员赋初值,则编译器会自动为其初始化为0; 3、静态数据成员既可以通过对象名引用,也可以通过类名引用。
修饰二:静态成员函数 1、静态成员函数和静态数据成员一样,他们都属于类的静态成员,而不是对象成员; 2、静态成员函数没有this指针; 3、静态成员函数主要用来访问静态数据成员而不能访问非静态成员。
【简单延伸一点:为什么静态成员不能访问非静态成员?】 首先static的成员是在类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而非static的成员是在创建对象的时候,即new 操作的时候才初始化的;
先后顺序是先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员还没有被加载必然不能使用,而非static的成员是在类加载之后,通过new操作符创建对象的时候初始化,此时static 已经分配内存空间,所以可以访问!
简单点说:静态成员属于类,不需要生成对象就存在了.而非静态需要生成对象才产生。