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

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

特网云57元,香港云主机 1核 1G 10M宽带1G(防御)

特网云官網特网云服务器在硬件级别上实现云主机之间的完全隔离;采用高端服务器进行部署,同时采用集中的管理与监控,确保业务稳定可靠,搭建纯SSD架构的高性能企业级云服务器,同时采用Intel Haswell CPU、高频DDR4内存、高速Sas3 SSD闪存作为底层硬件配置,分钟级响应速度,特网云采用自带硬防节点,部分节点享免费20G防御,可实现300G防御峰值,有效防御DDoS、CC等恶意攻击,保障...

香港2GB内存DIYVM2核(¥50月)香港沙田CN2云服务器

DiyVM 香港沙田机房,也是采用的CN2优化线路,目前也有入手且在使用中,我个人感觉如果中文业务需要用到的话虽然日本机房也是CN2,但是线路的稳定性不如香港机房,所以我们在这篇文章中亲测看看香港机房,然后对比之前看到的日本机房。香港机房的配置信息。CPU内存 硬盘带宽IP价格购买地址2核2G50G2M1¥50/月选择方案4核4G60G3M1¥100/月选择方案4核8G70G3M4¥200/月选择...

[6.18]IMIDC:香港/台湾服务器月付30美元起,日本/俄罗斯服务器月付49美元起

IMIDC发布了6.18大促销活动,针对香港、台湾、日本和莫斯科独立服务器提供特别优惠价格最低月付30美元起。IMIDC名为彩虹数据(Rainbow Cloud),是一家香港本土运营商,全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。香港服务器   $39/...

static变量为你推荐
云图片简单易学画的云彩图片rdlDVD±RW/±RDL/RAM 具体什么意思spawningvc出现error spawning c1.exe怎么解决?弹幕网站视频弹幕网站推荐疫苗之王万兽之王是什么意思文件系统类型文件系统的类型是 NTFS。无法决定卷版本和状态。CHKDSK 被终止?工作日志系统工作日志怎么写?有哪几个步骤?工作日志系统工作记录软件有哪些千年虫问题为什么千年虫这么可怕?不连接网线不就行了,为什么当时银行这么害怕资料丢失?bitlocker是什么电脑BitLocker驱动器加密是什么意思,怎么操作?有什么作用?
什么是域名 域名论坛 上海服务器租用 阿里云搜索 sharktech 高防dns linode日本 申请空间 数字域名 ntfs格式分区 免费网页空间 什么是web服务器 西安主机 lamp什么意思 supercache 江苏双线 深圳主机托管 小夜博客 国外免费网盘 酷锐 更多