Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 引用枚举实例作为该类型另一实例的字段是否合法?_Java_Enums_Static Members - Fatal编程技术网

Java 引用枚举实例作为该类型另一实例的字段是否合法?

Java 引用枚举实例作为该类型另一实例的字段是否合法?,java,enums,static-members,Java,Enums,Static Members,在主功能中,e是通过Day.SAT初始化的,但是为什么e.MON不是一个错误呢?初始化它有意义吗?枚举值几乎是“唯一的”静态final字段。在Java中,您可以通过引用访问静态字段。然而,你不应该这样做,因为这让人困惑 本质上,这两行做的是相同的事情(假设有一个daye在它们上面的某个地方定义): e、 MON“像”通过类的实例变量访问该类的静态成员,因此不会显示错误。为什么会抛出错误?它完全按照你告诉它的去做。如果你想输出你初始化的日期,你只需要System.out.println(e)当前代

在主功能中,
e
是通过
Day.SAT
初始化的,但是为什么
e.MON
不是一个错误呢?初始化它有意义吗?

枚举值几乎是“唯一的”
静态final
字段。在Java中,您可以通过引用访问静态字段。然而,你不应该这样做,因为这让人困惑

本质上,这两行做的是相同的事情(假设有一个
daye
在它们上面的某个地方定义):


e、 MON“像”通过类的实例变量访问该类的静态成员,因此不会显示错误。

为什么会抛出错误?它完全按照你告诉它的去做。如果你想输出你初始化的日期,你只需要
System.out.println(e)当前代码不会抛出错误,但会抛出关于静态访问的警告。(e.MON不是静态访问,你可以使用Day.MON)另外,作为一个快速的参考,你应该用驼峰案例标记你的类:我随意删除了一些与问题无关的代码。请阅读我知道这是离题的,但我这样做是为了所有不太幸运阅读你的代码的人,因为对我来说,这很痛苦。试着用
daye=null替换
e
并查看发生了什么;)@SHTester请不要在编译器错误中使用“throw”。在运行时抛出异常。
enum Day{SAT,SUN,MON,TUE,WED,THURS,FRI}

class Plan{
    Day d;

    public plan(Day d)
    {
        this.d=d;
    }

    Day getDay()
    {
        return d;
    }
}

class tester{
    public static void main(String[] args){
        Plan p=new Plan(Day.SAT);

        Day e=p.getDay();

        System.out.println(e.MON);
    }
}
System.out.println(Day.MON); // sane, normal way
System.out.println(e.MON); // supported, but discouraged way.