枚举值是否在类的所有实例之间共享?

时间:2011-03-17 14:52:08

标签: java enums static-members

所以,说我有以下枚举声明:

public class WatchService implements Runnable
{
    private State state;

    private enum State
    {
        FINDING_MANIFEST, FINDING_FILES, SENDING_FILES, WAITING_TO_FINISH
    };
    // other stuff
}

现在,说我有以下抽象类:

public abstract class MyOtherAbstractClass extends MyAbstractClass
{
    // other stuff
    private WatchService watchService;
    // other stuff
}

现在,假设我有以下类扩展上述抽象类:

public class MyClass extends MyOtherAbstractClass
{
    // other stuff
}

如果我有多个MyClass个实例,它们是否会共享当前的State值?例如,如果一个实例声明state = State.FINDING_MANIFEST;,那么所有实例的当前状态是否为FINDING_MANIFEST

我希望这是有道理的。

3 个答案:

答案 0 :(得分:4)

如果“state”是静态的,那么是。否则没有。

更改为:

private static State state;

这使得state在您班级的所有实例中共享。

答案 1 :(得分:1)

没有。 state是一个实例变量。每个实例化的对象都有自己的。

如果您将其定义为

private static State state;

然后只有一个实例,并且该类的所有实例都会看到相同的实例。

答案 2 :(得分:1)

如果我正确理解了这个问题,这不是针对枚举的。 想象一下使用private String state = "FINDING_MANIFEST";的相同情况。 除非statestatic,否则不会在实例之间共享。