zoukankan      html  css  js  c++  java
  • 你不知道的Static

    Static静态字段,静态方法,静态代码块

      简介

         一些场景下会要求一个类的多个实例共享一个成员变量;有时候想定义一些不和具体对象关联、不需要new就调用的方法

    举例:Console类的WriteLine,MessageBox的Show。这个时候就要使用静态。

         所谓静态方法、静态成员是类的方法、类的成员,他不归属于任何一个对象。因此不用new出来,直接类型.静态方法()就能用了。

     

      特征

    1、static变量不需要new就可以直接通过类名调用。static变量是共享的内存空间,非static变量则是对象隔离的。

    2、static 方法中无法使用this关键字,因为static独立于对象存在,不是任何人的唯一。

    3、static成员中只能访问static成员,不能直接访问非static成员。非static成员可以访问static成员。

     

      静态代码块

    1. 示例

    class MyTest
    {
        static MyTest()
        {
            Console.WriteLine("静态代码块");
        }
        public MyTest()
        {
            Console.WriteLine("构造方法");
        }  
    }
    MyTest t1 = new MyTest();          
    MyTest t2 = new MyTest();
     
    2. 说明
    1.静态代码块,在类第一次被使用的时候执行一次,只要用到类,哪怕没new对象(比如只是声明变量)也会被执行,且只执行一次。
    2.静态代码块在构造函数执行之前执行。
     
    3. 试题
     public class MyJingTaiDaimaKuai
        {
            public static int i = test1();//最开始执行
            public int age = test2();//new的时候先执行成员变量的初始化,再执行构造函数
     
            static MyJingTaiDaimaKuai()
            {
                Console.WriteLine("静态代码块");//再执行
            }
            public MyJingTaiDaimaKuai()
            {
                Console.WriteLine("构造函数");
            }
     
            public static int test1()
            {
                Console.WriteLine("test1");
                return 3;
            }
     
            public static int test2()
            {
                Console.WriteLine("test2");
     
                return 333;
            }
        }
     
    MyJingTaiDaimaKuai a1 = new MyJingTaiDaimaKuai();
    Console.WriteLine(a1.age);
     
    MyJingTaiDaimaKuai a2 = new MyJingTaiDaimaKuai();
    Console.WriteLine(a2.age);
    /* 对以上代码描述如下*/
    /*
    * 1.只要接触类,最先执行的是类中的静态的成员变量。
    * 2.其次执行的是静态代码块。
    * 3.静态成员变量的声明和定义仅在首次加载的时候执行一次。
    * 4.“动态”成员变量在构造函数之前执行。
    * 5.“动态成员变量在每次实例化对象时候都执行。
    */
  • 相关阅读:
    关于C语言变量初始化的两个问题的笔记
    源自StackOverflow:找到LIST中第一个降序成员,有助于对扩展方法、IEnumerable<T>、泛型的理解
    《PERL高效编程》学习笔记(1)【关于裸字处理】
    C#出题库项目的总结(2)
    遇到的浏览器兼容问题及应对方法
    春招面试小记
    关于团队成员的退出引发的一些回忆及感悟
    C#出题库项目的总结(1)
    写一个程序,分析一个文本文件(英文文章)中各个词出现的频率,并且把频率最高的10个词打印出来
    重定向和管道符
  • 原文地址:https://www.cnblogs.com/mcad/p/4193229.html
Copyright © 2011-2022 走看看