java之枚举类 Enum学习笔记
来源:互联网 发布:什么是网络市场营销 编辑:程序博客网 时间:2024/04/28 16:46
某些情况下,一个类的对象是有限并且固定的,比如季节类,只有四个对象。这种实例有限并且固定的类,为枚举类。
如何手动实现一个枚举类?
规则如下:
(1)通过private将构造器隐藏起来
(2)把这个类所有可能的实例都使用public static final 修饰的类变量来保存
举个例子:
public class Season { private String name; private String desc; private Season(String name, String desc){ this.name = name; this.desc = desc; } public String getName(){ return this.name; } public String getDesc(){ return this.desc; } public static final Season SPRING = new Season("春天","趁春踏青"); public static final Season SUMMER = new Season("夏天","夏日炎炎"); public static final Season FALL = new Season("秋天","秋高气爽"); public static final Season WINTER = new Season("冬天","冬雪三尺"); public static Season getSeason(int seasonNum){ switch(seasonNum){ case 1: return SPRING; case 2: return SUMMER; case 3: return FALL; case 4: return WINTER; default: return null; } }}
这个例子中,Season是一个不可变类。当其他程序要使用它的时候,可以使用getSeason()这个静态工厂方法来获取Season对象。
java中有封装好的枚举类,用关键字enum来定义,举一个小例子:
public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER;}
定义枚举类需要注意一下几个问题:
(1)一个java源文件只能定义一个public访问权限的枚举类,并且该java源文件也必须和该枚举类的类名相同。
(2)枚举类默认使用final关键字修饰,所以不能派生子类。
(3)枚举类的构造方法只能用private修饰,不论显式还是隐式。
(4)枚举类的所有实例,必须在枚举类的第一行显式列出,否则这个枚举类不能产生实例。
public class SeasonEnumTestDemo_01 { public static void main(String[] args){ for(SeasonEnum s : SeasonEnum.values()){ System.out.println(s); } judge(SeasonEnum.SPRING); } public static void judge(SeasonEnum s){ switch(s){ case SPRING: System.out.println("春天"); break; case SUMMER: System.out.println("夏天"); break; case FALL: System.out.println("秋天"); break; case WINTER: System.out.println("冬天"); break; } }}
输出:
SPRING
SUMMER
FALL
WINTER
春天
枚举类有一些常用的方法,比如compareTo(),toString(),valueOf()等,详细用法查看java API。
在一个枚举类中,可以定义类的属性,也就是类的实例变量。比如:
public enum Gender { MALE, FEMALE; public String name;} public class GenderTestDemo_01 { public static void main(String[] args){ Gender g = Enum.valueOf(Gender.class, "FEMALE"); g.name = "女"; System.out.println(g+"代表"+g.name); }}
以上,枚举类的实例只能是枚举值,不能随意的通过new来创建枚举类对象。
但是,一般的类,不会将成员变量的权限设置为public,类对外开放的是成员函数。所以,可以对以上的枚举类做一个改进。
public enum Gender1 { MALE,FEMALE; private String name; public String getName(){ return this.name; } public void setName(String name){ switch(this){ case MALE: if(name.equals("男")){ this.name = name; }else{ System.out.println("参数错误!"); return; } break; case FEMALE: if(name.equals("女")){ this.name = name; }else{ System.out.println("参数错误!"); return; } break; } }}
0 0
- java之枚举类 Enum学习笔记
- java学习笔记之 --------枚举(enum)
- java学习笔记之枚举类enum(转载)
- java之enum枚举类
- Java学习笔记-枚举(enum)
- Java enum 枚举类型学习笔记
- 枚举 Enum学习笔记
- 枚举Enum学习笔记
- java Enum枚举学习
- Java之枚举(Enum)
- java之枚举Enum
- 黑马程序员Java类之枚举(Enum)
- JAVA之enum(枚举类)解析
- python3学习笔记:枚举enum
- Java枚举类 enum
- JAVA 枚举类 Enum
- JAVA 枚举类 enum
- java学习笔记 switch中使用枚举enum
- arguments 对象
- JavaScript笔记:离线应用与客户端存储
- bug集(1)
- HTML+CSS基础 内联样式表与嵌入样式表设置不同时,听内联的
- 访问服务器中tomcat,重启及关闭tomcat服务器
- java之枚举类 Enum学习笔记
- <Unity3D>Unity3D中LineRenderer的使用
- Android开发之AlertDialog
- 数组中出现次数超过一半的数字_Glodon(7)_20160923
- VS2015使用小技巧 如何使用VS2015创建写HTML代码的项目
- 升级iOS10后app不能删除也不能下载
- php增加模块的方法
- Mono简介
- src/ndarray/ndarray.cc:347: GPU is not enabled