枚举类——指向自己的数据结构

 

public enum Weekday {
    SUN,MON,TUS,WED,THU,FRI,SAT
}

 

 

 

 

 编译一下它,再反编译一下看看它到底是什么样子的:

 

 

如果写成代码就是:

 

小白惊奇的发现,枚举类内部有多个不同的这个枚举类的实例,这些不同的实例仅名称不同,而内部结构都一样。

 

在这个类的内部还有这个类的实例,那么,内部实例的结构岂不是和这个类相同,内部实例的内部还将有内部实例,以此类推无穷无尽。

 

public class Main {

    public static void main(String[] args) {
        for (Weekday day : Weekday.values()) {
            System.out.println(day.name());
        }
        Weekday fri = Weekday.FRI.FRI.FRI.FRI;
        Weekday fri1 = Weekday.FRI;
        Weekday fri2 = Weekday.FRI.FRI;
        Weekday fri3 = Weekday.FRI.FRI.FRI;
        // enum -> String:
        System.out.println("FRI.name() = " + Weekday.FRI.name());
        // 定义时的序号:
        System.out.println("FRI.ordinal() = " + fri.ordinal());
        // String -> enum:
        System.out.println(Weekday.valueOf("FRI").name());
        System.out.println(Weekday.valueOf("FRI")==Weekday.FRI);
        System.out.println(fri==Weekday.FRI);
        System.out.println(fri==fri1);
        System.out.println(fri==fri2);
        System.out.println(fri==fri3);
        // 不存在的name:
        //Weekday.valueOf("ABC");
    }

}

结果:
SUN
MON
TUE
WED
THU
FRI
SAT
FRI.name() = FRI
FRI.ordinal() = 5
FRI
true
true
true
true
true

 

 

瞬时想起无限循环递归,会耗尽内存。这样用就没事么?

 

原来,类的内部实例都是static静态类型的实例,静态实例有个特性就是不管创建多少实例,实际上都只有一个实例。

 

恍然大悟,原来类内部的实例指向自己,所以才可以这样调用。

 

posted on 2019-08-22 20:02  梓沂  阅读(397)  评论(0编辑  收藏  举报