A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄涛 中级黑马   /  2012-7-20 10:02  /  1538 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄涛 于 2012-7-20 14:09 编辑

请各位大侠详细说明一下静态变量和非静态变量的区别及相关应用?十分感谢!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
   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();  
            }  
         }  
     }  

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
静态变量与非静态变量的区别如下:
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
而非静态变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;
非静态变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
非静态变量是局部变量,不共享的。
5.访问方式
静态成员不能访问非静态成员;
非静态成员可以访问静态成员。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
静态变量,随着类的加载而存在于方法区中,
所以其生命周期要长于普通变量。
而普通的非静态变量,如实例变量,随着对象的建立而存在与堆内存中。

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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
非静态变量必须创建对象后才能使用
而静态变量
随着类的加载而加载
优先于对象存在
被所有对象所共享
可以直接被类名调用

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
谢谢了,我懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马