深入理解Java和C#中static
顾名思义,static是静态的含义。一个静态的方法,只能调用静态成员。
static还有一个作用,就是“所有对象共享”。
下面的代码反映了在C#中对static变量的调用以及static变量的共享情况。
using System;
namespace staticTest
{
public class stu
{
public static int x = 0; //所有对象共享
public int y = 0; //所有对象独立
public stu(){
x ++;
y ++;
}
}
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine(stu.x);
stu s1 = new stu();
Console.WriteLine(stu.x);
stu s2 = new stu();
Console.WriteLine("s1 = " + stu.x);
Console.WriteLine("s1 = " + s1.y);
Console.WriteLine("s2 = " + stu.x);
Console.WriteLine("s2 = " + s2.y);
// TODO: Implement Functionality Here
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
输出结果:
Hello World!
0
1
s1=2
s1=1
s2=2
s2=1
在这里,有些地方是要注意和值得深究的:
1.访问stu类中静态成员x只能使用stu.x,而不能实例化stu。
2.在面向对象中,声明和定义是不同的,声明并不分配内存区域,但是定义就会在内存中开辟一片区域存
放该变量。
当我们定义s1:stu s1 = new stu();
这时候,已经在内存中开辟了stu这样对象的空间了,在这个空间中,x是存放在公共区域中,当我们再次
定义一个stu对象s2:stu s2 = new stu(); 时,公共空间的x值会在原来基础上加i1
但是y是s2自己空间里的,结果自然是1.
3.我们要想访问s1的x,方法只能使用stu.x,而不能使用s1.x,这个是Java和C#的区别。