static静态⽅法的优缺点
static可以修饰成员变量,成员⽅法,代码块,类
特点:
static修饰的⽅法和变量,为类所属⽅法和变量,不会在对象销毁时销毁,所以⽣命周期较长。
被static修饰的内容会随着类的加载⽽加载,优先于对象存在,成员变量和成员⽅法可以通过类名直接调⽤并被该类下所有对象共享。
在static⽅法中,不能出现this,super,因为其优先于对象⽽存在
使⽤:
在同⼀类中,当某⼀数据被所有实例化对象共享时,可以⽤static修饰
//关于c语⾔中static的使⽤
C程序⼀直由下列部分组成:
1)正⽂段——CPU执⾏的机器指令部分;⼀个程序只有⼀个副本;只读,防⽌程序由于意外事故⽽修改⾃⾝指令;
2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这⾥。
3)⾮初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。
4)栈——增长⽅向:⾃顶向下增长;⾃动变量以及每次函数调⽤时所需要保存的信息(返回地址;环境信息)。
5)堆——动态存储分。
在全局变量之前加上关键字static,全局变量就被定义成为⼀个全局静态变量。
1)内存中的位置:静态存储区(静态存储区在整个程序运⾏期间都存在)
2)初始化:未经初始化的全局静态变量会被程序⾃动初始化为0(⾃动对象的值是任意的,除⾮他被显⽰初始化)
3)作⽤域:全局静态变量在声明他的⽂件之外是不可见的。准确地讲从定义之处开始到⽂件结尾。
好处:
定义全局静态变量的好处:
<1>不会被其他⽂件所访问,修改
<2>其他⽂件中可以使⽤相同名字的变量,不会发⽣冲突。
局部静态变量
在局部变量之前加上关键字static,局部变量就被定义成为⼀个局部静态变量。
1)内存中的位置:静态存储区
2)初始化:未经初始化的全局静态变量会被程序⾃动初始化为0(⾃动对象的值是任意的,除⾮他被显⽰初始化)
3)作⽤域:作⽤域仍为局部作⽤域,当定义它的函数或者语句块结束的时候,作⽤域随之结束。
注:当static⽤来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作⽤域之后,并没有被销毁,⽽是仍然驻留在内存当中,直到程序
结束,只不过我们不能再对他进⾏访问。
当static⽤来修饰全局变量的时候,它就改变了全局变量的作⽤域(在声明他的⽂件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。
3. 静态函数
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的⽂件当中可见,不能被其他⽂件所⽤。
定义静态函数的好处:
<1> 其他⽂件中可以定义相同名字的函数,不会发⽣冲突
<2> 静态函数不能被其他⽂件所⽤。存储说明符auto,register,extern,static,对应两种存储期:⾃动存储期和静态存储期。 auto和register对应⾃动存储期。具有⾃动存储期的变量在进⼊声明该变量的程序块时被建⽴,它在该程序块活动时存在,退出该程序块时撤销。关键字extern和static⽤来说明具有静态存储期的变量和函数。⽤static声明的局部变量具有静态存储持续期(static storage duration),
或静态范围(static extent)。虽然他的值在函数调⽤之间保持有效,但是其名字的可视性仍限制在其局部域内。静态局部对象在程序执⾏到该对象的声明处时被⾸次初始化。
由于static变量的以上特性,可实现⼀些特定功能。static修饰的变量
1.统计次数功能
声明函数的⼀个局部变量,并设为static类型,作为⼀个计数器,这样函数每次被调⽤的时候就可以进⾏计数。这是统计函数被调⽤次数的最好的办法,因为这个变量是和函数息息相关的,⽽函数可能在多个不同的地⽅被调⽤,所以从调⽤者的⾓度来统计⽐较困难。
C语⾔中使⽤静态函数的好处:
静态函数会被⾃动分配在⼀个⼀直使⽤的存储区,直到退出应⽤程序实例,避免了调⽤函数时压栈出栈,速度快很多。
关键字“static”,译成中⽂就是“静态的”,所以内部函数⼜称静态函数。但此处“static”的含义不是指存储⽅式,⽽是指对函数的作⽤域仅局限于本⽂件。使⽤内部函数的好处是:不同的⼈编写不同的函数时,不⽤担⼼⾃⼰定义的函数,是否会与其它⽂件中的函数同名,因为同名也没有关系。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论