2 zksfxy zksfxy 于 2015.05.26 14:15 提问

关于静态变量初始化为当前类型的对象问题

public class test
{
int c = 0;
public static test my = new test(2);
public int X;
public test(int x)
{
X = x;
}
}
class Program
{
static void Main(string[] args)
{
test me = test.my;
Console.WriteLine(me.X.ToString () );
Console.ReadKey();
}
}

 在内存中,静态变量什么时候调用的构造方法啊?为什么自己能调用自己?

6个回答

wsh1992o
wsh1992o   Rxr 2015.05.26 14:38
已采纳

my不是静态变量,它只是在类内部实例化的一个对象
类有三种构造函数
1.静态构造函数 static test() 这类构造函数只能对类的静态变量进行初始化
2.实例构造函数 public test() 只要有实例化过程,就会调用这个构造函数
3.静态构造函数 private test() 一般用于只包含私有成员的类的初始化

Tiger_Zhao
Tiger_Zhao   Rxr 2015.05.26 14:22

在第一次调用 test.my 的时候初始化。
什么叫做“自己能调用自己”?test(2) 是构造函数好吗。

caozhy
caozhy   Ds   Rxr 2015.05.26 19:07

public static test my = new test(2);
其实这段代码是放在test的静态构造函数中执行。
静态构造函数和实例构造函数不矛盾。
比如说,一些水平很烂的老师经常会指导学生写如下的程序
class Program
{
int add(int a, int b)
{
return a + b;
}
public static void main()
{
Program p = new Program();
p.add(1, 2);
}
}
这完全可以。为什么说老师很烂,因为这种场合应该把add也定义成static变量才是正确的做法。

tongyi55555
tongyi55555   2015.05.26 14:35

static的东西在类加载时,就分配了内存空间,即编译时就为这些成员变量的实例分配了空间。

tianyang2008
tianyang2008   2015.05.26 15:46

C++的妈妈是C,故不论怎么变都会生成C代码,有些事情是编译器帮你做了,

q3733353520
q3733353520   2015.05.26 18:50

类中的静态变量是在编译的时候就分配了内存的,而且不管你的实例对象有多少它都只有1份

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!