static关键字<很详细>

static关键字的做用
C中static的做用
修饰一:静态局部变量
在修饰局部变量的时候,初始化局部变量只执行一次,并且延长了局部变量的生命周期,直到程序运行结束之后才释放。若是未对其初始化,系统会对默认初始化0或\0;ide

修饰二:静态全局变量
这个全局变量只能在本文件中访问,不能在其它文件中访问,即使是extern外部声明也不能够。其余文件中也能够定义和该变量同样的名字且不会冲突;函数

修饰三:静态函数
和静态全局变量同样,只能在该文件中被调用,其余文件不能调用。this

C++中static的做用
C++中static的做用除了具备C中的做用以外还具备如下做用:指针

修饰一:静态数据成员
一、静态数据成员是在程序开始运行时被分配空间,到程序结束以后才释放,只要类中指定了静态数据成员,即便不定义对象,也会为静态数据成员分配空间;
二、静态数据成员能够被初始化,可是只能在类体外进行初始化,若未对静态数据成员赋初值,则编译器会自动为其初始化为0;
三、静态数据成员既能够经过对象名引用,也能够经过类名引用。对象

修饰二:静态成员函数
一、静态成员函数和静态数据成员同样,他们都属于类的静态成员,而不是对象成员;
二、静态成员函数没有this指针;
三、静态成员函数主要用来访问静态数据成员而不能访问非静态成员。生命周期

【简单延伸一点:为何静态成员不能访问非静态成员?】
首先static的成员是在类加载的时候初始化的,JVM的CLASSLOADER的加载,首次主动使用加载,而非static的成员是在建立对象的时候,即new 操做的时候才初始化的;内存

前后顺序是先加载,才能初始化,那么加载的时候初始化static的成员,此时非static的成员尚未被加载必然不能使用,而非static的成员是在类加载以后,经过new操做符建立对象的时候初始化,此时static 已经分配内存空间,因此能够访问!编译器

简单点说:静态成员属于类,不须要生成对象就存在了.而非静态须要生成对象才产生。it

相关文章
相关标签/搜索