Java5 枚举类型
Java5 枚举类型使用总结
一、概述 当使用enum定义一个枚举类型时,实际上所定义的类型自动继承了java.lang.Enum类。而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final的。可以直接通过枚举类型名直接使用它们。 枚举在什么地方适用呢?一条普遍规则是,任何使用常量的地方,例如目前用 switch 代码切换常量的地方。如果只有单独一个值(例如,鞋的最大尺寸,或者笼子中能装猴子的最大数目),则还是把这个任务留给常量吧。但是,如果定义了一组值,而这些值中的任何一个都可以用于特定的数据类型,那么将枚举用在这个地方最适合不过。 所有枚举类都继承了Enum的方法,下面我们详细介绍这些方法。 |

1 public class EnumStudy {
2 public static void main(String [] args){
3 WeekDay weekDay=WeekDay.SUN;
4 System.out.println("对象本身:"+weekDay);//对象本身:SUN
5 System.out.println("枚举name方法"+weekDay.name());//枚举name方法SUN
6 System.out.println("枚举ordinal方法:序号"+weekDay.ordinal());//枚举ordinal方法:序号0
7 System.out.println("枚举toString方法"+weekDay.toString());//枚举toString方法SUN
8 //valuesOf()方法:将String转化成枚举对象
9 System.out.println(WeekDay.valueOf("FRI"));
10 //values()方法:返回所有的枚举值
11 System.out.println(WeekDay.values().length);
12 for(WeekDay wd:WeekDay.values()){
13 System.out.println(wd);
14 }
15 //*************枚举高级应用***************\\
16 System.out.println("-------------------------");
17 //枚举的每个值都是一个对象,他们都有构造方法,我们可给它重构一些构造方法
18 //每次第一个使用枚举值时,它会为所有枚举值都实例化一次
19 System.out.println(WeekDay2.SUN);
20 System.out.println(WeekDay2.TUE);
21 System.out.println("-------------------------");
22 //枚举的每个值都是一个对象,我我们也可以为它们添加一些属性和方法
23 TranfficLamp lamp = TranfficLamp.GREEN;
24 // TranfficLamp枚举添加的特有的属性
25 System.out.println(lamp.time);
26 // TranfficLamp枚举添加的特有的方法
27 System.out.println(lamp.nextLamp());
28 }
29 //普通枚举类
30 public enum WeekDay{
31 SUN,MON,TUE,WED,THI,FRI,SAT;
32 }
33 //有多个构造方法的枚举
34 public enum WeekDay2{
35 SUN(0),MON(1),TUE(),WED,THI,FRI,SAT;
36 //所有的方法或其它必须放在枚举值的下面
37 //构造器只能私有private,绝对不允许有public构造器。
38 //这样可以保证外部代码无法新构造枚举类的实例。
39 //这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。
40 //但枚举类的方法和数据域可以允许外部访问。
41 private WeekDay2(){
42 System.out.println("调用第一个构造方法");
43 }
44 private WeekDay2(int day){
45 System.out.println("调用第二个构造方法");
46 }
47 }
48 //有抽象方法和属性的枚举
49 public enum TranfficLamp{
50 RED(30){
51 public TranfficLamp nextLamp(){
52 return GREEN;
53 }
54 },
55 GREEN(45) {
56 public TranfficLamp nextLamp() {
57 return YELLOW;
58 }
59 },
60 YELLOW(5) {
61 public TranfficLamp nextLamp() {
62 return RED;
63 }
64 };
65 // 该枚举有一个抽象方法
66 public abstract TranfficLamp nextLamp();
67 // 该枚举有一个属性
68 public int time;
69 // 该枚举的构造方法必须要有一个int类型参数
70 private TranfficLamp(int time) {
71 this.time = time;
72 }
73 }
74 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)