黑马程序员技术交流社区

标题: [已解决]静态变量和非静态变量的区别? [打印本页]

作者: 黄涛    时间: 2012-7-20 10:02
标题: [已解决]静态变量和非静态变量的区别?
本帖最后由 黄涛 于 2012-7-20 14:09 编辑

请各位大侠详细说明一下静态变量和非静态变量的区别及相关应用?十分感谢!
作者: 许庭洲    时间: 2012-7-20 10:33
   using System;  
   using System.Collections.Generic;  
   using System.Text;  
   namespace Example01  
   {  
        class Program  
        {  
           class Class1  
           {  
               public static String staticStr = "Class";  
               public String notstaticStr = "Obj";  
           }  
           static void Main(string[] args)  
           {   
              Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr);  //静态变量通过类进行访问,该类所有实例的某一静态变量都是同一个值  ,输出Class1's staticStr: Class
              Class1 tmpObj1 = new Class1();  
              tmpObj1.notstaticStr = "tmpObj1";  
              Class1 tmpObj2 = new Class1();  
              tmpObj2.notstaticStr = "tmpObj2";              
              Console.WriteLine("tmpObj1's notstaticStr: {0}", tmpObj1.notstaticStr);  //非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值,输出tmpObj1's notstaticStr: tmpObj1  
              Console.WriteLine("tmpObj2's notstaticStr: {0}", tmpObj2.notstaticStr);  //非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值,输出tmpObj2's notstaticStr: tmpObj2
              Console.ReadLine();  
            }  
         }  
     }  
作者: 李根    时间: 2012-7-20 12:07
静态变量与非静态变量的区别如下:
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
而非静态变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;
非静态变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
非静态变量是局部变量,不共享的。
5.访问方式
静态成员不能访问非静态成员;
非静态成员可以访问静态成员。
作者: 苑占丽    时间: 2012-7-20 13:45
静态变量,随着类的加载而存在于方法区中,
所以其生命周期要长于普通变量。
而普通的非静态变量,如实例变量,随着对象的建立而存在与堆内存中。

静态变量可以用类名.静态变量的形式调用,
而非静态变量,必须通过对象的引用名.非静态变量的形式调用。


作者: 王璐    时间: 2012-7-20 14:04
非静态变量必须创建对象后才能使用
而静态变量
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用

作者: 黄涛    时间: 2012-7-20 14:08
谢谢了,我懂了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2