小编典典

类中的“静态”关键字有什么作用?

all

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

package hello;

public class Hello {

    Clock clock = new Clock();

    public static void main(String args[]) {
        clock.sayTime();
    }
}

但它给出了错误

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

所以我将声明更改为clock

static Clock clock = new Clock();

它奏效了。将关键字放在声明之前是什么意思?就可以对该对象执行的操作而言,它究竟会做什么和/或限制什么?


阅读 143

收藏
2022-03-15

共1个答案

小编典典

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

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

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

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

例子:

public class Example {
    private static boolean staticField;
    private boolean instanceField;
    public static void main(String[] args) {
        // a static method can access static fields
        staticField = true;

        // a static method can access instance fields through an object reference
        Example instance = new Example();
        instance.instanceField = true;
    }

[1]:根据运行时特性,它可以是每个 ClassLoader 或 AppDomain 或线程一个,但这不是重点。

2022-03-15