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.“动态”成员变量在每次实例化对象时候都执行。
*/

最新文章

  1. TCP三次握手和四次挥手状态变迁解析
  2. jquery键盘事件总结
  3. Monkey测试3——Monkey测试结果分析
  4. [CC]CC插件初探
  5. linux下恢复误删除的文件方法(ext2及ext3)
  6. SQL Server UDF用户自定义函数
  7. iOS9的那些坑 — — WeiboSDK registerApp启动就崩溃
  8. MYSQL查询一周内的数据(最近7天的)、最近一个月、最近三个月数据
  9. swoole 弹幕系统
  10. 创建多线程的第二种方法实现Callable接口
  11. PhoenixFD插件流体模拟——UI布局【Resimulation】详解
  12. ubuntu安装命令
  13. [Full-stack] 网页布局艺术 - Less
  14. go程序性能测量和分析
  15. ubuntu16.4+nginx+uwsgi+Django 部署上线
  16. delphi 消息的使用
  17. STM32f103的数电采集电路的双ADC的设计与使用
  18. WPF流程图制作系列相关基础一
  19. JAVA中的数据存储(堆及堆栈)
  20. HashMap 不能并发

热门文章

  1. 【leetcode】215. Kth Largest Element in an Array
  2. [转帖]Linux 的UTC 和 GMT
  3. ASP.NET存储Session的StateServer
  4. Java知识点整理(三)
  5. 详解免费高效实用的.NET操作Excel组件NPOI(转)
  6. jquery不能是使用普通的for循环 因为普通的for循环通过下表获取对象 如果通过下表获取对象的话 会转成dom对象
  7. java实现PV操作
  8. 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)
  9. WebLogic XMLDecoder反序列化漏洞(CVE-2017-10271)复现
  10. Amphetamine的cf日记