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

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

港云网络(¥1/月活动机器),香港CN2 4核4G 1元/月 美国CN2

港云网络官方网站商家简介港云网络成立于2016年,拥有IDC/ISP/云计算资质,是正规的IDC公司,我们采用优质硬件和网络,为客户提供高速、稳定的云计算服务。公司拥有一流的技术团队,提供7*24小时1对1售后服务,让您无后顾之忧。我们目前提供高防空间、云服务器、物理服务器,高防IP等众多产品,为您提供轻松上云、安全防护。点击进入港云网络官方网站港云网络中秋福利1元领【每人限量1台】,售完下架,活...

Hostodo商家提供两年大流量美国VPS主机 可选拉斯维加斯和迈阿密

Hostodo商家算是一个比较小众且运营比较久的服务商,而且还是率先硬盘更换成NVMe阵列的,目前有提供拉斯维加斯和迈阿密两个机房。看到商家这两年的促销套餐方案变化还是比较大的,每个月一般有这么两次的促销方案推送,可见商家也在想着提高一些客户量。毕竟即便再老的服务商,你不走出来让大家知道,迟早会落寞。目前,Hostodo有提供两款大流量的VPS主机促销,机房可选拉斯维加斯和迈阿密两个数据中心,且都...

BuyVM新设立的迈阿密机房速度怎么样?简单的测评速度性能

BuyVM商家算是一家比较老牌的海外主机商,公司设立在加拿大,曾经是低价便宜VPS主机的代表,目前为止有提供纽约、拉斯维加斯、卢森堡机房,以及新增加的美国迈阿密机房。如果我们有需要选择BuyVM商家的机器需要注意的是注册信息的时候一定要规范,否则很容易出现欺诈订单,甚至你开通后都有可能被禁止账户,也是这个原因,曾经被很多人吐槽的。这里我们简单的对于BuyVM商家新增加的迈阿密机房进行简单的测评。如...

static变量为你推荐
soapui下载手机系统用户界面软件下载weakhashmapJava中isEmpty方法如何使用?showwindowVB6.0中ShowWindow函数的使用空白代码html空格代码怎么写查字网拐字换什么偏旁 成新字bindserviceonserviceconnected什么时候执行tvos智能电视都什么功能被广电封杀了?arc是什么意思arcsin中arc是什么的缩写? 怎么读? ?waves插件请问下waves9是什么东西,插件吗?faq是什么意思fans是什么意思?
域名注册使用godaddy 免费申请网站域名 瓦工 webhosting 美国便宜货网站 512m windows2003iso hnyd qingyun 腾讯云分析 刀片服务器是什么 lol台服官网 免费吧 cdn加速原理 免费网页申请 彩虹云 带宽租赁 秒杀品 服务器硬件配置 卡巴斯基官网下载 更多