Static静态字段,静态方法,静态代码块
壹class="Apple-converted-space"> 简介
一些场景下会要求一个类的多个实例共享一个成员变量;有时候想定义一些不和具体对象关联、不需要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.“动态”成员变量在每次实例化对象时候都执行。
*/
参考页面:http://qingqingquege.cnblogs.com/p/5933752.html