什么是静态变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是静态变量?相关的知识,希望对你有一定的参考价值。

什么是静态变量? 它与局部变量有什么差别?

用 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有各种变量的详细说明

参考资料:http://msdn.microsoft.com/zh-cn/library/aa691170(VS.71).aspx

参考技术A ok

java之静态方法,静态变量

在自动化测试中,经常会用到静态方法和静态变量。那么什么是静态方法和静态变量呢?以及在什么情况下使用呢?下面来说一说

静态方法和静态变量是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法,通车用static来修饰。

他们都属于类本身,在类装载的时候被装载到内存,不自动进行销毁,会一直存在于内存中,直到JVM关闭。

静态变量:

public class Assertion {
    
    private static Log log = new Log(Assertion.class);
    
    public static boolean flag = true;
    
    public static List<Error> errors = new ArrayList<Error>();

静态方法:

    public static boolean setFlag(boolean fla){
        flag=fla;
        return flag;
        }

由于静态成员不需要new就可以使用,使用效率比非静态方法的效率高,所以比较适合以下场景:
1. 不需要生成对象的  经常频繁使用的  工具类里的Assertion, FileUtil, Log等。

2. 与对象无关的方法可设为静态方法。

3. 通用的类中一些常用的方法。

4. 很多类都需要用到的变量,设置成static后当做全局变量使用。

 


以上是关于什么是静态变量?的主要内容,如果未能解决你的问题,请参考以下文章

请教大家关于JAVA中的静态变量和静态方法

静态变量和成员变量有什么区别?应该怎么调用?

java 静态变量list的问题

c++中关于私有静态变量的问题

java 静态变量和静态常量

请问C++语言里静态变量和全局变量有啥区别?谢谢