• 你不知道的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.“动态成员变量在每次实例化对象时候都执行。
    */
  • 相关阅读:
    Python3之命令行参数处理
    基于 Laradock 环境 Project 的总结
    Typora功能新发现-自动复制图片到指定目录下
    ubuntu 18.04 设置静态ip方法
    vscode 同时编辑多处,多个光标 快捷键
    nginx和ftp搭建图片服务器
    Centos 6.5出现yum安装慢的情况
    Linux中的CentOS 6克隆之后修改
    springMVC-文件上传CommonsMultipartFile
    Spring和mybatis整合 org.mybatis.spring.mapper.MapperScannerConfigurer
  • 原文地址:https://www.cnblogs.com/mcad/p/4193229.html
Copyright © 2020-2023  润新知