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