Java中的枚举简单用法

声明 enum

枚举使用enum关键字来声明,把所有可能的值依次罗列出来,其所有元素默认都是被public static final修饰,即可直接使用了。

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

注意:必须将所有值罗列在该类所有成员的最前面,且如果后面没有其他成员时,可以将末尾的分号;省略不写,否则不可省略。

构造函数

1.构造函数只能是私有权限

  • private写与不写都是等价的
public enum WeekDay {
    MON,TUS,WED,THU,FRI,SAT,SUN;
    private WeekDay(){}
}

等价于

public enum WeekDay {
    MON,TUS,WED,THU,FRI,SAT,SUN;
    WeekDay(){}
}
  • 直接罗列的值相当于是调用了无参构造,即上面的代码也相当于这样
public enum WeekDay {
    MON(),TUS(),WED(),THU(),FRI(),SAT(),SUN(){};
    private WeekDay(){}
}

2.可以重载,必须提供无参构造

自带方法

values()返回所有罗列出的值

private static void f2() {
    WeekDay[] values = WeekDay.values();
    for (WeekDay value : values) {
        System.out.println(value);
    }
}
MON
TUS
WED
THU
FRI
SAT
SUN

valueOf(String name)根据名称来获取

前提是确实存在,否则抛出Exception in thread "main" java.lang.IllegalArgumentException: No enum constant vip.sjxq.test.WeekDay.SU1N at java.lang.Enum.valueOf(Enum.java:238)

private static void f3() {
    WeekDay w = WeekDay.valueOf("SUN");
    System.out.println(w);
}

可以有抽象成员

1.抽象方法

如果定义了抽象方法,则每个罗列出来的值都要去实现定义的抽象方法,如我们定义一个抽象的nextDay()方法

public enum WeekDay {
    MON() {
        @Override
        WeekDay nextDay() {
            return TUE;
        }
    },TUE() {
        @Override
        WeekDay nextDay() {
            return null;
        }
    },WED() {
        @Override
        WeekDay nextDay() {
            return THU;
        }
    },THU() {
        @Override
        WeekDay nextDay() {
            return FRI;
        }
    },FRI() {
        @Override
        WeekDay nextDay() {
            return SAT;
        }
    },SAT() {
        @Override
        WeekDay nextDay() {
            return SUN;
        }
    },SUN(){
        @Override
        WeekDay nextDay() {
            return MON;
        }
    };
    private WeekDay(){}
    abstract WeekDay nextDay();
}

也可以再重写toString()方法

public enum WeekDay {
    MON() {
        @Override
        WeekDay nextDay() {
            return TUE;
        }

        @Override
        public String toString() {
            return "星期一";
        }
    }, TUE() {
        @Override
        WeekDay nextDay() {
            return null;
        }

        @Override
        public String toString() {
            return "星期二";
        }
    }, WED() {
        @Override
        WeekDay nextDay() {
            return THU;
        }

        @Override
        public String toString() {
            return "星期三";
        }
    }, THU() {
        @Override
        WeekDay nextDay() {
            return FRI;
        }

        @Override
        public String toString() {
            return "星期四";
        }
    }, FRI() {
        @Override
        WeekDay nextDay() {
            return SAT;
        }

        @Override
        public String toString() {
            return "星期五";
        }
    }, SAT() {
        @Override
        WeekDay nextDay() {
            return SUN;
        }

        @Override
        public String toString() {
            return "星期六";
        }
    }, SUN() {
        @Override
        WeekDay nextDay() {
            return MON;
        }

        @Override
        public String toString() {
            return "星期天";
        }
    };

    private WeekDay() {
    }

    abstract WeekDay nextDay();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水晶心泉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值