static变量static静态局部变量和静态全局变量的区别详解

static变量  时间:2021-07-05  阅读:()

什么是静态变量?

用 static 修饰符声明的字段称为静态变量。

静态变量在包含了它的那个类型的静态析构函数(第 10.11 节)执行之前就存在了,在关联的应用程序域终止时终止。

局部变量是通过局部变量声明来声明的,此声明可以出现在块、for 语句、switch 语句或 using 语句中。

局部变量的生存期是程序执行过程中的某一“段”,在此期间,一定会为该局部变量保留存储。

此生存期从进入与它关联的块、for 语句、switch 语句或 using 语句开始,一直延续到对应的块、for 语句、switch 语句或 using 语句的执行以任何方式结束为止。

(进入封闭块或调用方法会挂起(但不会结束)当前的块、for 语句、switch 语句或 using 语句的执行。

)如果以递归方式进入父块、for 语句、switch 语句或 using 语句,则每次都创建局部变量的新实例,并且重新计算它的局部变量初始值设定项(如果有的话)。

局部变量不自动初始化,因此没有默认值。

出于明确赋值检查的目的,局部变量被视为初始未赋值。

局部变量声明可包括局部变量初始值设定项,在此情况下变量被视为在它的整个范围内(局部变量初始值设定项中提供的表达式内除外)已明确赋值。

在局部变量的范围内,在局部变量声明符之前的文本位置引用该局部变量是编译时错误。

局部变量的实际生存期依赖于具体实现。

例如,编译器可能静态地确定块中的某个局部变量只用于该块的一小部分。

根据这种分析,编译器生成的代码可能会提前回收该变量的存储(相对于包含该变量的生存期)。

局部引用变量所引用的存储的回收与该局部引用变量(第 3.9 节)的生存期无关。

foreach 语句和 try 语句的特定 catch 子句也声明局部变量。

对于 foreach 语句,局部变量是一个迭代变量(第 8.8.4 节)。

对于特定的 catch 子句,局部变量是一个异常变量(第 8.10 节)。

foreach 语句或特定的 catch 子句所声明的局部变量被视为在它的整个范围内已明确赋值。

MSDN有各种变量的详细说明

关于Java中的static变量的优缺点

我也网上学来的,听不听?知识不分来源,择优而取。

static 修饰变量时,这个变量从程序运行到结束就会一直存在,随时都可以使用;但是最重要的是,这个变量在整个程序中只有一个实例对象;如果再加上public修饰这个变量,那在哪都能用这个变量了。

如果再加个final修饰这个变量,那就不能再修改了,你声明的什么,他到程序结束都不能修改,换句话说,他就是常量了。

当你需要做一个垄断生意时,想到static就对了,他占的那个地盘(内存)到死才会放开。

代码里平时需要做垄断生意的时候比较少。

对于性能可以忽略,你就算声明出1000个double类型的变量,能占多大内存?有时候还能提高性能,比如单例模式!

11. Static变量是什么含义

你问的是JAVA问题吗??? 这东西都是在类里面声明的! 可以用来声明变量或者方法: 他的特性是:它声明的变量/方法是属于类的,不是属于类的实例,他在加载类的时候就在内存中为它声明的变量/属性分配了空间(其他的没有实例的都没有空间的). 它可以被类直接调用:如:String b=类名.a()(a是static声明的方法) 类名.A=5 当然实例也可以调用 和正常调用没是2样 还有就是只要它被调用后(不管是类自己调用,还是别的实力),则以后不管是哪个调用.它的值不在是以前的默认值了!而是前面被改掉后的值. 一句话:它声明的东西是公共的,谁都可以去改他!打它骂它,或者歼灭它.不过会留下永远的伤痕!并不会自动恢复!

static静态局部变量和静态全局变量的区别详解

一、静态局部变量: 1、static类型的内部变量同auto自动变量(即未加 static 声明的局部变量)一样,是某个特定函数的局部变量,即只能在定义该变量的函数内使用该变量,两者作用域相同;两者的不同在于:auto自动变量会随着函数被调用和退出而存在和消失,而static类局部变量不会,它不管其所在的函数是否被调用,都将一直存在;不过,尽管该变量还继续存在,但不能使用它。

倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。

换言之,static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。

2、函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作(出现在函数内部的基本类型的的静态变量初始化语句只有在第一次调用才执行)。

而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

3、静态局部变量的初始化表达式必须是一个常量或者常量表达式。

即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。

而对自动变量auto来说,如果不赋初值则它的值将是个不确定的值。

4、当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。

虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用(主要是变量的作用域造问题成的),因此仍以采用局部静态变量为宜。

注:局部静态变量占用内存时间较长,并且可读性差,因此,除非必要,尽量避免使用局部静态变量。

二、静态全局变量 全局变量(外部变量)的声明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

这两者在存储方式上并无不同。

static静态局部变量和静态全局变量区别 这两者的区别在于: 1、非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

从以上分析可以看出———— 把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。

把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static静态变量会被放在程序的全局存储区中(即在程序的全局数据区,而不是在堆栈中分配,所以不会导致堆栈溢出),这样可以在下一次调用的时候还可以保持原来的赋值。

这一点是它与堆栈变量和堆变量的区别。

Gcore(gcorelabs)俄罗斯海参崴VPS简单测试

有一段时间没有分享Gcore(gcorelabs)的信息了,这是一家成立于2011年的国外主机商,总部位于卢森堡,主要提供VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日本、韩国、新加坡、荷兰、中国(香港)等多个国家和地区的十几个机房,商家针对不同系列的产品分为不同管理系统,比如VPS(Hosting)、Cloud等都是独立的用户中心体系,部落分享的主要是商家的Hosting(Virtu...

PIGYUN:美国联通CUVIPCUVIP限时cuvip、AS9929、GIA/韩国CN2机房限时六折

pigyun怎么样?PIGYunData成立于2019年,2021是PIGYun为用户提供稳定服务的第三年,目前商家提供香港CN2线路、韩国cn2线路、美西CUVIP-9929、GIA等线路优质VPS,基于KVM虚拟架构,商家采用魔方云平台,所有的配置都可以弹性选择,目前商家推出了七月优惠,韩国和美国所有线路都有相应的促销,六折至八折,性价比不错。点击进入:PIGYun官方网站地址PIGYUN优惠...

Webhosting24:$1.48/月起,日本东京NTT直连/AMD Ryzen 高性能VPS/美国洛杉矶5950X平台大流量VPS/1Gbps端口/

Webhosting24宣布自7月1日起开始对日本机房的VPS进行NVMe和流量大升级,几乎是翻倍了硬盘和流量,价格依旧不变。目前来看,日本VPS国内过去走的是NTT直连,服务器托管机房应该是CDN77*(也就是datapacket.com),加上高性能平台(AMD Ryzen 9 3900X+NVMe),还是有相当大的性价比的。此外在6月30日,又新增了洛杉矶机房,CPU为AMD Ryzen 9...

static变量为你推荐
bindserviceonserviceconnected什么时候执行拓扑关系什么是空间数据的拓扑关系slideshare什么是slide sandalslideshare佳能复印MG3620怎么使用?flowplayer如何编译flowplayer源码smartuploadSmartUpload组建实现文件上传下载,我要把文件保存到项目中的某个文件夹中,该如何实现?最好有程序参考弹幕播放器看过的剧有一个弹幕出来的是什么播放器弹幕网站谁能给我解释一下什么叫A站,什么叫B站?都是啥网站?layoutsubviews如何让NSSplitView的子View的大小固定暴力破解密码8位密码暴力破解要多久
美国vps主机 西安域名注册 未注册域名查询 三级域名网站 联通c套餐 国外bt paypal认证 服务器架设 镇江联通宽带 52测评网 135邮箱 国外代理服务器软件 太原网通测速平台 卡巴斯基破解版 上海联通宽带测速 服务器硬件防火墙 drupal安装 512mb 德讯 阿里云邮箱申请 更多