精华内容
下载资源
问答
  • 即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。4.当多次调用一个函数且要求调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用...
  • 静态变量的类型说明符是static,静态变量属于静态存储方式,但属于静态存储方式的不一定是静态变量,如外部变量(全局变量)就属于静态存储方式,但不是静态变量。必须有static加以定义才是静态变量,或静态全局变量...

    转自:http://www.cnblogs.com/yangfengming/archive/2009/06/23/1509559.html

    静态变量

    静态变量的类型说明符是static,静态变量属于静态存储方式,但属于静态存储方式的不一定是静态变量,如外部变量(全局变量)就属于静态存储方式,但不是静态变量。必须有static加以定义才是静态变量,或静态全局变量。对于自动变量(局部变量),属于动态存储方式。当自动变量用static定义后就成为了静态自动变量。或静态局部变量,从而成为静态存储方式。

    局部变量

    以前的累计值不会通过调用函数保留下来,函数只会简单地返回调用它的那个相同值。

    静态局部变量

    1.静态局部变量在函数类定义,但它不像局部变量那样,当调用时就存在,推出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。

    2.静态局部变量的生存期虽然为整个源程序,当期作用域仍与自动变量相同。只能在定义改变量的函数内使用该变量,退出该函数后,尽管改变了还继续存在,但不能使用它。

    3.允许对构造类静态局部变量赋初值。若未赋予初值,则有系统自动赋予0值。

    4.对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的

      量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的

      值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜.

    全局静态变量与全局变量的区别

    1.全局变量的说明之前再冠以static就构成了静态的全局变量,全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式了。这两者在存储方式上并无同。

    2.非静态全局变量的作用域是整个原程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,及只在定义该变量的源文件内有效,在

      同一源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该院文件内的函数公用,因此可以避免其他源文件中引起错误。

    总结

    从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。应予以注意。



    转自:http://justshare.iteye.com/blog/407168

    要讲清静态变量与全局变量的区别,要从四个方面:一为修饰符,二为存储地址,三为生命周期,四为外部可访问性。 
    修饰符:全局变量在源文件的函数外部声明(不含extern),但若其它源文件要调用这个变量,就需要通过extern关键字来引用一下。静态变量用static来修饰; 
    存储地址:两者都是存储在静态存储区,非堆栈上,它们与局部变量的存储分开; 
    生命周期:两者都是在程序编译时或程序装入时由系统自动分配的,程序结束时消亡; 
    外部可访问性:全局变量在整个程序的任何地方均可访问,而静态变量相当于面向对象中的私有变量,它的可访问性只限定于声明它的那个源文件,即作用域仅局限于本文件(静态函数也一样); 

    由于它们都是由系统分配的存储空间,所以它们的存储地址是固定的,但值是可变的

    展开全文
  • 文章目录静态变量、实例变量、局部变量JVM中存放的位置 静态变量、实例变量、局部变量JVM中存放的位置 总结一下这三种变量JVM中存放的位置,首先看一段代码: public class StaticObjTest { static class ...

    静态变量、实例变量、局部变量在JVM中存放的位置

    总结一下这三种变量在JVM中存放的位置,首先看一段代码:

    public class StaticObjTest {
          static class Test{
              static ObjectHolder staticObj = new ObjectHolder();
              ObjectHolder instanceObj = new ObjectHolder();
              
              void foo(){
                  ObjectHolder localObj = new ObjectHolder();
                  System.out.println("done");
              }
          }
          
          
          private static class ObjectHolder{
              
          }
    }
    

    在这段代码中,很明显创建了三种变量:staticObj、instanceObj、localObj
    其中instanceObj变量是一个实例变量,他是随着Test的对象实例存放在Java堆内存中
    localObj是在方法区内创建的局部变量,所以他应该存放在foo()方法中的栈帧中的局部变量表中
    staticObj是一个static静态变量,他应该随着Test中的类型信息存放在方法区内

    展开全文
  • 静态变量

    2021-02-20 09:02:00
    静态变量的作用域 是文件 ,只这个文件中有效 静态局部变量 如果某个块中,声明了某个静态变量,无论该块是否被访问,该静态变量内存中存在。 只有访问该块时,才能使用,Static内部变量 保存了上一次使用...

    静态变量的作用域 是文件 ,只在这个文件中有效


    静态局部变量

    如果在某个块中,声明了某个静态变量,无论该块是否被访问,该静态变量都在内存中存在。
    只有访问该块时,才能使用,Static内部变量 保存了上一次使用后的值
    Static类型的内部变量是一种只能在某个特定函数中使用,但一 直占据存储空间的变量(可以通过指针 在该块的外部进行访问)
    静态局部变量 只会进行一次初始化 如果最后再次调用Fun1函数 静态局部变量不会再次初始化成10

    void Fun1(void);
    void Fun2(void);
    void Fun3(void);
    int *Sp = NULL;
    int *p = NULL;
    
    int main(int argc, char* argv[])
    {
    	Fun1();
    	Fun2();
    
    	Fun3();
    	Fun2();
    	return 0;
    }
    
    
    void Fun1(void)
    {
    	static int a = 10;
    	int b = 20;
    
    	Sp = &a;
    	p = &b;
    }
    
    
    void Fun2()
    {
    	printf("Sp = %d  p = %d\n",*Sp,*p);
    }
    
    
    void Fun3(void)
    {
    	*Sp = 30;
    	*p = 20;
    }
    

    在这里插入图片描述

    静态全局变量

    全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
    全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。
    这两者在存储方式上并无不同。

    这两者的区别虽在于:
    1、非静态全局变量的作用域是整个源程序 ,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
    2、静态全局变量则限制了其作用域, 即只在定义该变量的源文件 内有效,在同一源程序的其它源文件(即声明了该变量的CPP文件,或包含该变量声明头文件的CPP文件)中不能使用它。

    由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

    从以上分析可以看出————
    把局部变量改变为静态变量后是改变了它的存储方式,即改变了它的生存期。
    把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

    因此static这个说明符在不同的地方所起的作用是不同的。应予以注意。

    关于Static关键字
    1.静态变量,分配在静态存储区,在数据段中。函数退出之后,变量值不变。
    2.作用域,全局的静态变量、静态函数只能在本文件中使用。(不同于一般全局变量)
    局部的静态变量同函数的局部变量

    展开全文
  • 静态变量保存Spring ApplicationContext

    千次阅读 2019-04-08 22:27:38
    * 以静态变量保存Spring ApplicationContext, 可任何代码任何地方任何时候取出ApplicaitonContext. @Service @Lazy(false) public class SpringContextHolder implements ApplicationContextAware, DisposableBean...

    **
     * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.

    @Service
    @Lazy(false)
    public class SpringContextHolder implements ApplicationContextAware, DisposableBean {

        private static ApplicationContext applicationContext = null;

        private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class);

        /**
         * 取得存储在静态变量中的ApplicationContext.
         */
        public static ApplicationContext getApplicationContext() {
            assertContextInjected();
            return applicationContext;
        }

        /**
         * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
         */
        @SuppressWarnings("unchecked")
        public static <T> T getBean(String name) {
            assertContextInjected();
            return (T) applicationContext.getBean(name);
        }

        /**
         * 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.
         */
        public static <T> T getBean(Class<T> requiredType) {
            assertContextInjected();
            return applicationContext.getBean(requiredType);
        }

        /**
         * 清除SpringContextHolder中的ApplicationContext为Null.
         */
        public static void clearHolder() {
            if (logger.isDebugEnabled()){
                logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);
            }
            applicationContext = null;
        }

        /**
         * 实现ApplicationContextAware接口, 注入Context到静态变量中.
         */
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) {
            SpringContextHolder.applicationContext = applicationContext;
        }

        /**
         * 实现DisposableBean接口, 在Context关闭时清理静态变量.
         */
        @Override
        public void destroy() throws Exception {
            SpringContextHolder.clearHolder();
        }

        /**
         * 检查ApplicationContext不为空.
         */
        private static void assertContextInjected() {
            Validate.validState(applicationContext != null, "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
        }
    }

    展开全文
  • 静态变量可以分为:
  • 按照存储区分:全局变量、静态全局变量和静态局部变量都存放内存的全局数据区,局部变量存放在内存的栈区。   按作用域分:全局变量整个工程文件内都有效;静态全局变量只定义它的文件内有效;静态局部变量...
  • 概念首先得明白局部变量静态局部变量,全局变量静态全局变量这几个概念,以下面程序举例://main.cpp int a = 0; //全局变量 static int b=0;//静态全局变量 main() { int c; //局部变量 static int d;//静态...
  • 全局变量、全局静态变量、局部变量、局部静态变量区别
  • 静态变量存储哪个区

    万次阅读 2019-06-26 22:40:35
    静态变量存储__区 A 全局区 B 堆 C 栈 D 常量区 参考答案:A 知识点 内存到底分几个区? 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 2、堆区(heap) — 一般由程序员...
  • 全局变量、局部变量、全局静态变量、局部静态变量的区别。要从分配内存的位置和作用域入手来解释。 全局变量,分配的内存在静态存储区内存上面,其作用域是全局作用域,也就是整个程序的生命周期内都可以使用,...
  • 静态成员变量,不能使用this,super关键字,可以使用静态方法中,也可以使用非静态方法非静态变量:1.属于对象中的属性2.对象被初始化存放在,堆内存区中(因为对象一直存放在堆内存区域中)3.非静态变量,不能...
  • 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。...
  • 最近用C#搞一个PLC通讯层程序时,发现多线程中读取数据经常串掉,经分析原来使用别人提供的简单demo未将全局变量前的...(1)全局变量静态全局变量静态局部变量存放在内存的静态存储区域; (2)局部变量
  • C#中变量分为:全局变量、静态全局变量、... (2)局部变量存放在内存的栈区。    2、按作用域分  (1)全局变量整个工程文件内都有效;  (2)静态全局变量只定义它的文件内有效;  (3)静态局部变量...
  • 静态变量:不被static修饰的变量,每创建一次对象,就会为变量分配一次内存,存放在堆内存中,对象消失对应的变量消失. JAVA中初始化的顺序:加载类;静态变量初始化;静态代码块(其只能调度静态的,不能调度非静态的);...
  • 静态变量 全局变量

    2015-03-20 10:43:33
    变量可以分为全局变量、静态...按存储区域分:全局变量、静态全局变量和静态局部变量都存放内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量整个工程文件内都有效,只需一个源文件中定义defin
  • 静态变量和静态函数

    2019-07-31 16:17:46
    按存储区域分,全局变量、静态全局变量和静态局部变量都存放内存的静态存储区域,局部变量存放在内存的栈区。 按作用域分: 全局变量整个工程文件内都有效; 静态全局变量只定义它的文件内有效; 静态局部...
  • Static静态变量、静态方法、静态块 1、类中被static修饰的变量称为:静态变量 被static修饰的方法为:静态方法 2、类中方法外没有static修饰的变量称为:成员变量 没有被static修饰的方法称为:成员方法 静态变量和...
  • 初学C语言静态变量

    2019-11-25 00:38:57
    使用 static 关键字修饰变量时,我们称此变量为静态变量静态变量的存储方式与全局变量一样,都是静态存储方式。但这里需要特别说明的是,静态变量属于静态存储方式,属于静态存储方式的变量却不一定就是静态...
  • 1、bss是英文block started by symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户...
  • 今天开始看《程序员的自我修养:链接、装载与库》,对ELF文件格式内容进行一下总结,主要分析全局变量,静态变量以及局部变量存放位置。ELF文件有很多种:可重定位文件(如静态库),可执行文件,共享文件(动态库)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 519,621
精华内容 207,848
关键字:

静态变量存放在哪里