具体来说,我正在尝试这段代码:
package hello;
public class Hello {
Clock clock = new Clock();
public static void main(String args[]) {
clock.sayTime();
}
}
但它给出了错误
无法访问静态方法 main 中的非静态字段
所以我将 clock
的声明更改为:
static Clock clock = new Clock();
它奏效了。将那个关键字放在声明之前是什么意思?就可以对该对象执行的操作而言,它究竟会做什么和/或限制什么?
原文由 Ali 发布,翻译遵循 CC BY-SA 4.0 许可协议
static
成员属于类而不是特定实例。这意味着 只有一个
static
字段的实例存在[1]即使您创建了该类的一百万个实例或者您没有创建任何实例。它将被所有实例共享。由于
static
方法也不属于特定实例,因此它们不能引用实例成员。在给出的例子中,main
不知道它应该引用Clock
类的哪个实例(因此也不知道Hello
类的哪个实例)。static
会员只能参考static
会员。实例成员当然可以访问static
成员。旁注: 当然,
static
成员可以 通过对象引用 访问实例成员。例子:
[1]:根据运行时特性,它可以是每个 ClassLoader 或 AppDomain 或线程一个,但这不是重点。