静态变量_静态变量赋值 - CSDN
精华内容
参与话题
  • 静态变量static

    千次阅读 多人点赞 2018-09-05 21:09:07
    静态变量静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放 ,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来...

    静态变量
    静态变量只存在于函数作用域内,也就是说,静态变量只存活在栈中。一般的函数内变量在函数结束后会释放 ,比如局部变量,但是静态变量却不会。就是说,下次再调用这个函数的时候,该变量的值会保留下来。
    所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。
    静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且它会保持最新的值。说其静态,是因为它不会随着函数的调用和退出而发生变化。即上次调用函数的时候,如果我们给静态变量赋予某个值的话,下次函数调用时,这个值保持不变。

    展开全文
  • JAVA的静态变量、静态方法、静态类

    万次阅读 多人点赞 2016-03-26 14:09:48
    静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明。 (1)Java静态对象和非静态对象有什么区别?  比对如下:  静态对象 非静态对象  拥有属性:

          静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明。

    (1)Java静态对象和非静态对象有什么区别?

          比对如下:

                                             静态对象                                                        非静态对象     
    拥有属性:                是类共同拥有的                                             是类各对象独立拥有的
    内存分配:               内存空间上是固定的                                      空间在各个附属类里面分配
    分配顺序:               先分配静态对象的空间                    继而再对非静态对象分配空间,也就是初始化顺序是先静态再非静态.
           java静态对象到底有什么好处?

    A,静态对象的数据在全局是唯一的,一改都改。如果你想要处理的东西是整个程序中唯一的,弄成静态是个好方法。 非静态的东西你修改以后只是修改了他自己的数据,但是不会影响其他同类对象的数据。 
    B,引用方便。直接用 类名.静态方法名  或者  类名.静态变量名就可引用并且直接可以修改其属性值,不用get和set方法。
    C,保持数据的唯一性。此数据全局都是唯一的,修改他的任何一处地方,在程序所有使用到的地方都将会体现到这些数据的修改。有效减少多余的浪费。

    D,static final用来修饰成员变量和成员方法,可简单理解为“全局常量”。对于变量,表示一旦给值就不可修改;对于方法,表示不可覆盖。
    (2)静态变量、静态方法和静态块

           通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象(跟类是否有static修饰无关)。

           你可以将方法和变量都声明为static。static 成员的最常见的 例子是main( ) 。声明为static的方法有以下几条限制(main也是??):  ·

    A,它们仅能调用其他的static 方法

    B,它们只能访问static数据

    C,它们不能以任何方式引用this 或super(this涉及到对象,super 与继承有关)

           示例:Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块。

    public class TestNew {
    	static int a = 3;
    	static int b;
    	static void meth(int x){
    		System.out.println("x = "+x);
    		System.out.println("a = "+a);
    		System.out.println("b = "+b);
    	}
    	static {
    		System.out.println("static block initialized");
    		b = a*4;
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		meth(42);
    	}
    }
    

           执行结果是:

    static block initialized
    x = 42
    a = 3
    b = 12

    上述class TestNew的执行顺序是:首先static 块执行(打印一条消息),a被设置为3,最后b被初始化为a*4 成12。然后调用main(),main () 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。
    (3)外部使用静态变量或者静态方法

           在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用,你只要在类的名字后面加点号运算符即可。可以看到,这种格式与通过对象引用变量调用非static方法或者变量的格式类似。示例:

    class StaticDemo{
    	static int a = 42;
    	static int b = 99;
    	static void callme(){
    		System.out.println("a = "+a);
    	}
    }
    public class TestNew {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		StaticDemo.callme();
    		System.out.println("b = "+StaticDemo.b);
    	}
    }

         执行结果:

    a = 42
    b = 99

    (4)静态内部类是指在一个类的内部,又定义了一个用static修饰的类。可以用C中的结构体内嵌结构体来理解。
    A,首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。

    B,静态方法、静态成员变量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。这样静态内部类就可以理解了,它可以直接被用 外部类名+内部类名 获得。举例如下:

    public class Build {

           ..............

         public static class VERSION {

                ................

                public static final String RELEASE = getString("ro.build.version.release");

                ................

          }

          ................

    }

    在外部可以直接通过Build.VERSION.RELEASE来访问。

           补充一个:关于类中类变量的定义(与static主题无关)。WakeLock是PowerManager类中的类,已经import android.os.PowerManager;如果要定义WakeLock型的变量,需要PowerManager.WakeLock mSmartStayWakeLock = null;如果想WakeLock mSmartStayWakeLock = null;则Import时要用import android.os.PowerManager.WakeLock;。

          

    参考原文:http://www.cnblogs.com/-0_0-/articles/1962368.html

    参考原文:http://blog.sina.com.cn/s/blog_5cd7f5b40100r0rt.html

    参考原文:http://zhidao.baidu.com/question/149873207.html

    参考原文:http://ddvcxj.blog.51cto.com/1064441/265347

    展开全文
  • 静态变量static(C)

    千次阅读 2020-05-17 10:14:10
    静态变量在函数间调用时保持他们的值不变。 它的语法结构为: static c_type data_name; 其中,c_type 为基础的数据类型,data_name是变量名。 生存期 生存期的概念是在程序执行过程中体现的。程序开始执行后,对所...

    static

    static是C语言关键字之一。
    static 数据类型用来给变量创建永久存储空间。静态变量在函数间调用时保持他们的值不变。
    它的语法结构为:
    static c_type data_name;
    其中,c_type 为基础的数据类型,data_name是变量名。

    生存期

    生存期的概念是在程序执行过程中体现的。程序开始执行后,对所需要的变量申请空间,直至这个变量被销毁。这段时间便是一个变量的生存期。
    由于静态变量static在第一次被调用时被创建,当主函数被销毁时才会被销毁。那么的话,其生存期便会远远的超过创建它的那个函数。这样就达到了对其延寿的作用。

    void fun(int x)
    {
    	static int a = x;
    	static int b = 0;
    	a++;
    	printf("a= %d \n", a);
    }
    int main()
    {
    	for (int i = 10; i > 0; i--)
    	{
    		fun(i);
    	}
    	system("pause");
    	return 0;
    }
    

    由于a是静态变量,所以当第一次开辟空间时被赋予了10。那么它在fun函数销毁时并不会被销毁,并且在fun函数被再次调用时不会被创建。所以本程序的输出结果如下所示。
    静态变量测试结果示意图
    由图可见,静态变量可以自加。

    可见性

    可见性指的是在编译过程中对于一个变量来说,可以被使用的能力。静态变量的可见性如同普通变量,向下可见。

    	a = 10;
    	static int a;
    

    输入以上程序,编译器会提醒你未定义标识符a。

    原理

    当函数被调用的时候,会在栈区申请一段内存,来存放函数内的变量。当函数调用结束时,这段内存便会被释放。而静态变量static申请的内存不在栈区。而在数据区。当函数被销毁时,它不会随着函数的销毁而释放,从而实现了其生存期超过了函数本身的功能。
    当静态变量static被创建时,在数据区为其分配了一段空间,并且分配了一个标志符,设为1。当经过第一次赋值之后,该标志符被设为0。再次声明该变量时,由于其已经存在并且标志位为0,因此系统不会将其声明值赋给该变量(原文为:从而限制了之后对其的赋值)。

    展开全文
  • 静态变量与非静态变量的区别

    万次阅读 2012-03-05 16:09:53
    静态变量的类型说明符是static,非静态变量反而类型说明符就不是static了。本文主要介绍静态和非静态变量的区别,希望对你有帮助,一起来看。 AD: 静态变量静态变量使用 static 修饰符进行声明在所属类被装载...

    静态变量的类型说明符是static,非静态变量反而类型说明符就不是static了。本文主要介绍静态和非静态变量的区别,希望对你有帮助,一起来看。

    AD:

    静态变量:静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建通过对象进行访问同一个类的不同实例的同一非静态变量可以是不同的值。

    对于自动变量,它属于动态存储方式。但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。

    下面介绍静态变量与非静态变量的区别如下:

    1.内存分配

    静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;而非静态变量需要被实例化后才会分配内存。

    2.生存周期

    静态变量生存周期为应用程序的存在周期;非静态变量的存在周期取决于实例化的类的存在周期。

    3.调用方式

    静态变量只能通过“类.静态变量名”调用,类的实例不能调用;非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。

    4.共享方式

    静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
    非静态变量是局部变量,不共享的。

    5.访问方式

    静态成员不能访问非静态成员;非静态成员可以访问静态成员。

    静态变量在类装载的时候分配内存,以后创建的对象都使用的该内存,相应的操作也就是对这块内存进行操作。也可以看作是另类的全局变量。

    在WebSerivice中想只进行一次初始化,而不用每次都进行初始化这样占用大量资源。还可以对调用的服务进行管理,比如想把每次调用的服务进行排队执行,可以将想应信息放到Arraylist中,静态时钟中排队执行。

    C#静态构造函数及静态变量

    静态构造函数:

    (1)用于对静态字段、只读字段等的初始化。              

    (2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。        

    (3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数

    (4)静态构造函数是不可继承的,而且不能被直接调用。            

    (5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。    

    (6)任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。  

    (7)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

    经典例子:

    1. /*  
    2. * 静 态 构 造 函 数 练 习  
    3. * (1)①②③……为执行顺序  
    4. * (2)输出结果: static A()  
    5. * static B()  
    6. * X = 1, Y = 2  
    7. */ 
    8. using System;  
    9. class A  
    10. {  
    11. public static int X;  
    12. static A() //④ 执行完后返回到③  
    13. {  
    14. X = B.Y + 1;  
    15. Console.WriteLine("static A()");  
    16. }  
    17. }  
    18. class B  
    19. {  
    20. public static int Y = A.X + 1; //③ 调用了A的静态成员,  
    21. // 转到A的静态构造函数---->  
    22. static B() //② 如果带有初始值设定项的静态字段,  
    23. // 执行该类的静态构造函数时,  
    24. // 先要按照文本顺序执行那些初始值设定项。  
    25. // 转到初始值设定项---->  
    26. {  
    27. Console.WriteLine("static B()");  
    28. }  
    29. static void Main() //① 程序入口,  
    30. // 如果类中包含用来开始执行的 Main 方法,  
    31. // 该类的静态构造函数将在调用 Main 方法之前执行。  
    32. // 转到B的静态构造函数---->  
    33. {  
    34. Console.WriteLine("X = {0}, Y = {1}", A.X, B.Y);//⑤ 输出结果  
    35. Console.ReadLine();  
    36. }  

    关于C#静态构造函数的几点说明:

    静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

    1. class SimpleClass  
    2. {  
    3. // Static constructor  
    4. static SimpleClass()  
    5. {  
    6. //  
    7. }  

    在使用静态构造函数的时候应该注意几点:

    1、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。

    2、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

    3、一个类只能有一个静态构造函数。

    4、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

    5、最多只运行一次。

    6、静态构造函数不可以被继承。

    7、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。


    展开全文
  • 静态变量

    2019-03-03 20:33:24
    1、静态变量是属于所有对象的,因此可以被所有的对象共享 基本概念:静态属性时该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个...
  • static--静态变量与普通变量的区别

    千次阅读 2019-03-12 10:44:16
    静态变量与普通变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽...
  • C语言中的静态变量和非静态变量

    万次阅读 2017-11-30 15:05:52
    1.全局静态变量:在全局变量前面加上关键词static,全局变量就被定义成一个全局静态变量。 (1)内存中的位置:静态存储区。 (2)作用域:在程序任何地方都是可见的。 2.局部静态变量:在局部变量前面加上关键词...
  • static 静态变量和静态代码块的执行顺序

    万次阅读 多人点赞 2018-05-25 20:43:52
    众所周知 在android中static 修饰的会被称之为 静态常量,静态变量, 静态方法 ,还有就是静态代码块,用static{ // 代码块 非static修饰的方法,变量,常量, 是不能再静态代码块中使用的 } 表示。 static修饰...
  • 静态变量与动态变量

    万次阅读 多人点赞 2018-08-02 20:21:10
    静态变量,全局动态变量都是静态存储 2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放 3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式...
  • static 静态变量生命周期。-=---

    万次阅读 2012-08-18 11:06:05
    静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。...
  • 1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和...2>静态局部变量具有局部作用域,它只被初始化一次,自从第一次被
  • spring注入静态变量

    万次阅读 2020-04-04 01:02:38
    静态变量并不属于对象的属性,而是属于类的属性,而Spring则是基于对象的属性进行依赖注入的。所以用注解注入静态变量是不可行的,会一直报NullPointerException 例如 :直接注入静态的redisTemplate是不行的 @...
  • 全局变量和静态变量的区别

    万次阅读 多人点赞 2019-06-08 21:42:04
     全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。  这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变....
  • Matlab中的静态变量和全局变量

    万次阅读 2015-05-12 21:04:58
    1、静态变量(persistent)在函数中声明的变量,当函数调用完之后就会释放。如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为静态变量静态变量不能在声明的时候赋值,而且只能在function里...
  • 面试题:静态变量和实例变量的区别?

    万次阅读 多人点赞 2015-06-02 20:13:36
    在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。  在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量...
  • 变量可以分为:全局变量静态全局变量静态局部变量和局部变量。 按存储区域分,全局变量静态全局变量静态局部变量都存放在内存的静态 存储区域,局部变量存放在内存的栈区。 按作用域分,全局变量在整个...
  • 动态变量和静态变量的区别

    千次阅读 2015-10-03 10:13:01
    动态变量和静态变量的区别:1、存储位置动态变量:存储在内存出栈数据区静态变量:存储在全局数据区(静态数据区)2、生命期动态变量:根据你定义的位置确定,比如你在一个函数中定义的,那么超出该函数范围变量将...
  • 静态变量存储在哪个区

    万次阅读 2017-03-21 22:29:56
    静态变量存储在__区 A 全局区 B 堆 C 栈 D 常量区 2017年3月21日19:00开始笔试,选项凭回忆打的,未全匹配。 本人参考答案:A知识点内存到底分几个区?1、栈区(stack)— 由编译器自动分配释放 ,存放...
  • 静态变量与动态变量的定义与区别

    万次阅读 2017-03-19 20:08:34
    动态变量和静态变量的定义和区别如下:
  • Python----静态变量

    万次阅读 2018-06-08 11:08:32
    理解下面的代码,分析为什么结果不同 class Jingtai(object): Count = 0 Ja1 = Jingtai() Ja2 = Jingtai() Ja2.Count = 1 ...class Jingtai(object)的类变量Count的值并没有被Ja2.Count = 1这一行代...
1 2 3 4 5 ... 20
收藏数 969,813
精华内容 387,925
关键字:

静态变量