静态成员

Posted cicily

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了静态成员相关的知识,希望对你有一定的参考价值。

关键字: static

用在: 字段、方法、属性、构造函数、事件

作用 :可以被类的所有实例共享,都访问的同一个内存位置。

    想到这个 同一个内存位置,我脑海里突然浮现一种声音,“你见,或者不见我     我就在那里   不悲 不喜”

     静态成员和实例成员不同的保存方式,静态成员存储在堆中。实例成员要通过new 一个对象来访问。静态成员直接通过“class XXX.”来访问。

     静态成员在访问之前就已经初始化好了。 

  class Program
    {
        static void Main(string[] args)
        {
           
            Pet[] pets = new Pet[] { new Dog("DD"), new Cat("CC") };//new Dog的时候执行了一次++Num
          
         
            Dog D = new Dog("DD1");//此对象的创建通过其类的构造函数执行了一次++Num
            Dog.ShowNum();//调用静态方法
            D.Lost();//
            Dog.ShowNum();
            Dog d0 = (Dog)pets[0];
            d0.Lost();
            Dog.ShowNum();

        }

    }
    abstract public class Pet//当包含抽象方法时,必须用abstract声明
    {
        protected string Name;//protected 保护级别,派生类可访问
        public Pet(string name)//基类的构造函数
        {
            Name = name;
        }
        public void PrintName()
        {
            Console.WriteLine("Print" + Name);
        }

      
        abstract public void Speak();
    }
    public class Dog : Pet
    {
        static int Num;
        static Dog()// 静态构造函数// 静态字段初始化
        {
            Num = 0;
        }
        public Dog(string name) : base(name)//构造函数//用关键字base调用了基类的构造函数
        {
            ++Num;
        }
        new public void PrintName()
        {
            Console.WriteLine("子打印" + base.Name);
        }
       
        sealed override public void Speak()
        {
            Console.WriteLine("子说" + Name);
        }
        static public void ShowNum()
        {
            Console.WriteLine("Dog‘s number = "+ Num);
        }
         public void Lost()
        {
            --Num;
            Console.WriteLine( Name+" is Lost!");
        }
    }

 

以上是关于静态成员的主要内容,如果未能解决你的问题,请参考以下文章

支持动态或静态片段的不同屏幕尺寸?

java 静态代码块 代码块 构造函数 静态成员变量 成员变量的初始化顺序

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

片段内部静态类和gradle问题

Java类的各种成员初始化顺序如:父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺