您的位置:首页 > 其它

关于类的静态变量和非静态变量区别的一个研究例子

2006-07-27 23:48 246 查看
例子如下:


public class testclass




...{


public static testclass t = new testclass();


public static int staticNum = 1;


public static int i;


public int num = 1;




public testclass()




...{


Console.WriteLine("第{0}次",++i);


Console.WriteLine("staticNum={0}", staticNum);


Console.WriteLine("num={0}", num);




Console.Read();


}


}




public class StaticTest




...{


public static void Main(String[] args)




...{


testclass tt = new testclass();


}


}

输出结果如下:

################################################################################

第1次
staticNum=0
num=1

第2次
staticNum=1
num=1

###############################################################################
这了例子我一时也很难弄明白,了解多少就说多少吧。
首先看 staticNum=0 这个输出结果。这说明,当生成静态对象t时,静态变量staticNum只是声明而没有初
始化,即没分配内存空间(如果没声明,在调用时就会出现错误而无法通过编译的)。
不过,如果将 public static int staticNum = 1 放在 public static testclass t = new
testclass() 之前,如下:


public static int staticNum = 1;


public static testclass t = new testclass();


public static int i;


public int num = 1;

则输出结果就变成了:
###########################################################################

第1次
staticNum=1
num=1

第2次
staticNum=1
num=1

###############################################################################
这时候的静态变量staticNum就不仅声明而且经过初始化了。
具体原理可能要涉及到类的编译,等我理清楚了再继续写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: