关于类的静态变量和非静态变量区别的一些问题

                  

一.静态变量和非静态变量的基本概念
   
   数据成员包括:静态变量和非静态变量两种
  
   A 静态变量:带有static 修饰符的变量称为静态变量。
   B 非表态变量:不带有static修饰符声明的变量称为实例变量。

二. 两都的一些区别
    
     ex:
     class test
     {
            static int b=0;        //静态变量
            int a=0;                 //非静态变量

     }
     1.内存分配的区别:静态变量定义时就会存在于内存当中,直到它所在的类的程序运行结束之时它都将一直存在;而非静态变量需要被实例化后才会分配内存,它的存在周期取决于实例化的类的生存周期。
       所以他们的调用方式也不相同:
       静态变量:可以(只能)通过类本身.静态变量名,类的实例是不能调用的。
       非静态变量: 当该变量所在的类被实例化后,可以通过实例化的类名来访问。
       (另外静态成员不能访问非静态成员;非静态成员可以访问静态成员)
       ex:test.b=2; //OK
             test t=new test();
             t.a=0;      //OK
             t.b=3 ;      //Error 编绎时会出错 无法使用实例引用访问静态成员

     2. 两者值的共享问题: 静态变量被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值。非静态变量是不共享的。
        ex:下面的最后的输出结果是:10,0
        class Class1
       {
        public  static int cs1=0;
        public int cs3=0;
        }
        class Class2
       {
        public void a()
        {
            Console.WriteLine(Class1.cs1.ToString()); // 因cs1是静态变量,所以当类Program修改cs1=10后,其它类的实例读到的值就是修改后的值10,所以此处输出的是:10
            Class1 cc = new Class1();
            Console.WriteLine(cc.cs3.ToString());  //虽然类Program修改值cs3=34;但因cs3在//class1类中是非静态变量,它的生存周期于实例化他的类的周期相同,所以当用类名ct实例结束后其
//值也不会存在于内存当中,当此类用另一个类名cc来实例化后调用变量cs3,其值仍是非静态变量初始//化的值0.
        }
        }
        class Program
       {
         static void Main(string[] args)
        {
            Class1.cs1 = 10;
            Class1 ct = new Class1();
            ct.cs3 = 34;
            Class2 cm = new Class2();
            cm.a(); 
  
         }
       } 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值