请大家帮忙看一下这个问题,真的不知道应当如何描述,谢谢各位了.
在c#当中如下:
using System;
class A
{ static int i=999;
public static void main()
{
A a=new A();
Console.WriteLine(a.i); //提示错误
}
}
在java当中如下:
class A
{ static int i=999;
public static void main(String args[])
{
A a=new A();
System.out.println(a.i); //运行正常
}
}
针对上述两种情况,请高手给我解答一下,谢谢了.
------解决方案--------------------static的缘故
类的成员或者是静态成员,或者是实例成员。一般说来,可以这样来理解:静态成员属于类,而实例成员属于对象(类的实例)。当字段、方法、属性、事件、运算符和构造函数声明中含有 static 修饰符时,它声明静态成员。
下列示例阐释访问静态和实例成员的规则:
class Test
{
int x;
static int y;
void F()
{
x = 1; // Ok, same as this.x = 1
y = 1; // Ok, same as Test.y = 1
}
static void G()
{
x = 1; // Error, cannot access this.x
y = 1; // Ok, same as Test.y = 1
}
static void Main()
{
Test t = new Test();
t.x = 1; // Ok
t.y = 1; // Error, cannot access static member through instance
Test.x = 1; // Error, cannot access instance member through type
Test.y = 1; // Ok
}
}
------解决方案--------------------额??不是两个都错吗,static修饰的变量不是要类名直接访问的吗
------解决方案--------------------改成
Console.WriteLine(a.i.ToString());
或
Console.WriteLine(i.ToString());
分别试一下吧
------解决方案--------------------在java 中访问静态变量可以用 类名.静态变量 也可以用 对象名.静态变量(虽然这样不推荐)
但在C#中只能用 类名.静态变量 这种形式, 对象名.静态变量 被认为是错误的语法