返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 1844|回复: 0

[原创] 【原创】静态成员的讲解

[复制链接]
发表于 2021-1-27 00:34:59 | 显示全部楼层 |阅读模式
本帖最后由 da11 于 2021-1-27 23:05 编辑

//程序主Main
       //static讲解主Main
        static void Main()
        {
            //需求:统计Stu类创建对象的数量
            //类被加载,静态数据成员存在,当第一次出现类名的时候,静态数据成员就会被加载,加载顺序优于实例成员。
            int countTest = Stu.dxStaticCount;

            //第二次出现类名,静态数据成员不会被加载
            Stu stu01;

            stu01 =  new Stu(); //0-->1
            Stu stu02 = new Stu(); //0-->1
            Stu stu03 = new Stu(); //0-->1


            //非静态成员通过引用调用
            Console.WriteLine(stu03.dxCount);

            //静态成员通过类名用调用
            Console.WriteLine(Stu.dxStaticCount);
            Console.ReadLine();

        }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
 楼主| 发表于 2021-1-27 00:35:52 | 显示全部楼层
//Stu.cs
    class Stu : JiChengClass
    {
        //定义自动属性语法:prop + tab + tab 补全
        /// <summary>
        /// 学生的成绩等级
        /// </summary>
        public string stuLevel { get; set; }

        //非静态成员(实例成员:属于对象),每个对象都会创建一份此数据成员
        public int dxCount { get; set; }


        /*静态成员(属于类)变量
         * · 使用static关键字修饰的成员变量
         * · 静态成员变量属于类,类被加载时初始化,且只有一份。
         * · 实例成员变量属于对象,在每个对象被创建时初始化,每个对象一份。
         * · 特点:存在优先于对象,被所有对象所共享,常驻内存
         *
         *静态构造函数
         * · 初始化类的静态数据成员。
         * · 仅在类被加载时执行一次。
         * · 不允许使用访问修饰符。
         *
         *静态方法
         * · 通过引用调用实例方法时,会隐式的传递对象引用,以便在
         *方法内部可以正确访问该对象成员变量。
         * · 通过类名调用静态方法时,因为没有具体对象,所以在static
         *方法中不能访问实例成员。
         *
         *静态类
         * · 使用static关键字修饰的类。
         * · 不能实例化,只能包含静态成员。
         * · 静态类不能被继承,但是静态方法、属性都可以被继承。
         *
         *静态的适用性
         * · 利:单独空间存储,所有对象共享,可直接被类名调用。
         * · 弊:静态方法中只能访问静态成员,共享数据被多个对象访问会出现并发。
         * · 适用场合:
         *      1.所有对象需要共享的数据。
         *      2.在没有对象前就要访问成员。
         *      3.工具类适合做静态类(常用,不需要过多数据)。
         *
        */
        //静态成员,仅仅存储一份,每个对象都可以共享使用此数据成员
        public static int dxStaticCount { get; set; }

        private Random sjNum;

        private int[] SZ;

        //实例构造函数的作用:提供创建对象的方式,初始化类的实例数据成员。
        //规范化:在构造函数里才初始化实例成员,在字段中不要初始化实例成员。
        //实例代码块,可以访问实例成员,也可以访问静态成员。
        public Stu()
        {
            sjNum = new Random();
            SZ = new int[5];
            dxCount++;
            dxStaticCount++;
        }

        //静态构造函数的作用:初始化类的静态数据成员。不允许加访问修饰符。
        //执行时机:类被加载时调用一次
        static Stu()
        {
            //"非静态字段 要求 对象引用" ==> 静态代码块,只能访问静态成员。
            //dxCount++;

            dxStaticCount++;
        }


    }

回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表