“static”关键字在类中起什么作用?

具体来说,我尝试了以下代码:

包你好;
公共课你好{
时钟=新时钟();
公共静态void main(字符串参数[]){
clock.sayTime();
}
}

但它给出了错误

无法访问静态方法main中的非静态字段

因此,我将时钟的声明更改为:

静态时钟=新时钟();

它成功了。在声明之前加上这个关键字意味着什么?它究竟会做什么和/或限制对该对象可以做什么

static成员属于类而不是特定实例

这意味着,即使您创建了一百万个类实例或没有创建任何实例,一个静态字段也只存在一个实例[1]。它将被所有实例共享

由于static方法也不属于特定实例,因此它们不能引用实例成员。在给出的示例中,main不知道应该引用Hello类的哪个实例(因此也不知道应该引用Clock类的哪个实例)静态成员只能引用静态成员。当然,实例成员可以访问static成员

旁注:当然,static成员可以通过对象引用访问实例成员

例如:

公共类示例{
私有静态布尔静态字段;
私有布尔instanceField;
公共静态void main(字符串[]args){
//静态方法可以访问静态字段
staticField=true;
//静态方法可以通过对象引用访问实例字段
示例实例=新示例();
instance.instanceField=true;
}

[1] :根据运行时特征,它可以是每个类加载器、AppDomain或线程一个,但这并不重要

发表评论