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


    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静态类型的实例,静态实例有个特性就是不管创建多少实例,实际上都只有一个实例。

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

  • 相关阅读:
    InterlockedIncrement函数详解
    c#事件调用
    jdk-8u281-windows-x64.exe JavaSE开发包
    安卓SDK_installer_r24.4.1-windows
    c#中@符号作用
    c#winformAPI_MFC_API
    NFC上位机未发现RFID设备
    MFC隐藏到托盘双击还原_右键退出实现方法
    win10 win+R快捷指令启动程序汇总
    CAN总线调试---节点掉线问题
  • 原文地址:https://www.cnblogs.com/wangziyi0513/p/11396500.html
Copyright © 2020-2023  润新知