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

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

HaloCloud:日本软银vps100M/200M/500M带宽,,¥45.00元/月

halocloud怎么样?halocloud是一个于2019下半年建立的商家,主要提供日本软银VPS,广州移动VDS,株洲联通VDS,广州移动独立服务器,Halo邮局服务,Azure香港1000M带宽月抛机器等。日本软银vps,100M/200M/500M带宽,可看奈飞,香港azure1000M带宽,可以解锁奈飞等流媒体,有需要看奈飞的朋友可以入手!点击进入:halocloud官方网站地址日本vp...

UCloud云服务器香港临时补货,(Intel)CN2 GIA优化线路,上车绝佳时机

至今为止介绍了很多UCLOUD云服务器的促销活动,UCLOUD业者以前看不到我们的个人用户,即使有促销活动,续费也很少。现在新用户的折扣力很大,包括旧用户在内也有一部分折扣。结果,我们的用户是他们的生存动力。没有共享他们的信息的理由是比较受欢迎的香港云服务器CN2GIA线路产品缺货。这不是刚才看到邮件注意和刘先生的通知,而是补充UCLOUD香港云服务器、INTELCPU配置的服务器。如果我们需要他...

DMIT(8.72美元)日本国际线路KVM月付8折起,年付5折

DMIT.io是成立于2018年的一家国外主机商,提供VPS主机和独立服务器租用,数据中心包括中国香港、美国洛杉矶和日本等,其中日本VPS是新上的节点,基于KVM架构,国际线路,1Gbps带宽,同时提供月付循环8折优惠码,或者年付一次性5折优惠码,优惠后最低每月8.72美元或者首年65.4美元起,支持使用PayPal或者支付宝等付款方式。下面列出部分日本VPS主机配置信息,价格以月付为例。CPU:...

static变量为你推荐
rdlcordless phone是什么意思欢迎页面如何设置电脑的欢迎界面?qq业务中心QQ业务怎么开通?数据分析报告范文如何做一个好的数据分析报告暴力破解密码用什么方法才能破解别人密码easeljswindow.webkit.messagehandlers js中这句是什么意思基础设施即服务基础设施与市政公用设施以及公共设施之间的区别!sungard李庆星老板咋样 我准备去CDMC上海决策者经济顾问公司上班了桌面管理系统WIN7如何启用桌面窗口管理器?酷源码酷我音乐音乐源文件在哪
虚拟空间哪个好 便宜域名注册 未注册域名查询 日本vps 域名主机管理系统 科迈动态域名 diahosting rak机房 创宇云 南昌服务器托管 panel1 英文站群 腾讯云分析 hostker 有奖调查 网通服务器托管 台湾谷歌 免费私人服务器 vul 免费网络空间 更多