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

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

稳爱云(26元),香港云服务器 1核 1G 10M带宽

稳爱云(www.wenaiyun.com)是创建于2021年的国人IDC商家,主要目前要出售香港VPS、香港独立服务器、美国高防VPS、美国CERA VPS 等目前在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。机房采用业内口碑最好香港沙田机房,稳定,好用,数据安全。线路采用三网(电信,联通,移动)回程电信cn2、cn2 gia优质网络,延迟低,速度快。自行封装的...

极光KVM美国美国洛杉矶元/极光kvmCN7月促销,美国CN2 GIA大带宽vps,洛杉矶联通CUVIP,14元/月起

极光KVM怎么样?极光KVM本月主打产品:美西CN2双向,1H1G100M,189/年!在美西CN2资源“一兆难求”的大环境下,CN2+大带宽 是很多用户的福音,也是商家实力的象征。目前,极光KVM在7月份的促销,7月促销,美国CN2 GIA大带宽vps,洛杉矶联通cuvip,14元/月起;香港CN2+BGP仅19元/月起,这次补货,机会,不要错过了。点击进入:极光KVM官方网站地址极光KVM七月...

亚州云-美国Care云服务器,618大带宽美国Care年付云活动服务器,采用KVM架构,支持3天免费无理由退款!

官方网站:点击访问亚州云活动官网活动方案:地区:美国CERA(联通)CPU:1核(可加)内存:1G(可加)硬盘:40G系统盘+20G数据盘架构:KVM流量:无限制带宽:100Mbps(可加)IPv4:1个价格:¥128/年(年付为4折)购买:直达订购链接测试IP:45.145.7.3Tips:不满意三天无理由退回充值账户!地区:枣庄电信高防防御:100GCPU:8核(可加)内存:4G(可加)硬盘:...

static变量为你推荐
inode智能客户端win7如何使用校园网iNode智能客户端rownumbersql server 2005中row_number怎么用丁奇王下七武海和四皇分别是谁?民生电商民生电商是民生银行吗?色库赤峰中色库博红烨锌业有限公司就是冶炼厂在 赤峰的 什么地方,一 人知道吗???社工库网站怎么找社工库?手机建设银行网址建设银行个人网上银行使用手机浏览器访问没有登录入口。alphablenddelphi编程中value值是什么意思?qq号码查询知道qq怎样查手机号码screencapture求一款这样的截图软件
cn域名个人注册 5折 服务器评测 主机 mediafire下载 12306抢票助手 mysql主机 日本bb瘦 免费防火墙 创建邮箱 网通服务器 英雄联盟台服官网 免费asp空间申请 学生服务器 创速 江苏双线 带宽测试 睿云 免费主页空间 电信主机托管 更多