今天C#课上,老师讲到了关于静态变量、静态构造函数、构造函数的问题,感觉挺不错的。在Java中也测试了一下,基本是一致的,只是形式有所不同。做个记录,也给大家分享一波。
关于这三个概念的问题主要注意以下几点:
一、初始化次序(依次是静态变量、静态构造函数、构造函数)
二、初始化次数(静态的都只会初始化一次)
三、初始化时机(对于静态的只要使用了类,就会初始化,非静态的则要在创建对象的时候才初始化);
下面给出一个简单的C#代码来说明一下
class A
{
public static int X;
static A()
{
X = B.Y + 1;
}
}
class B
{
public static int Y = A.X + 1;
static B(){}
}
public class Test
{
public static void main(string[] args)
{
Console.Writeline("A.X = {0},B.Y = {1}",A.X,B.Y); //输出什么内容?
}
}
先简单分析一下:(根据上面提到的注意事项可以很清楚的分析得到答案)
因为在 Test 主类中最先使用了 A.X (根据初始化时机我们知道,此时,A类中所有静态的成员都会初始化,但不会执行构造函数),又根据