知识点
相关文章
更多最近更新
更多Java枚举学习笔记
2019-03-09 14:17|来源: 领悟书生
为什么要有枚举
问题:要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
用普通类模拟枚举的实现原理
package com.naxsu.enumtest; /** * 普通类如何实现枚举功能 */ publicabstractclass WeekDay { // 私有的构造方法 private WeekDay() { } // 每个元素分别用一个公有的静态成员变量表示 publicfinalstatic WeekDay SUN = new WeekDay() { @Override public WeekDay nextDay() { returnMON; } }; publicfinalstatic WeekDay MON = new WeekDay() { @Override public WeekDay nextDay() { returnSUN; } }; // 采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类 publicabstract WeekDay nextDay(); public String toString() { returnthis == SUN ? "SUN" : "MON"; } } |
@Test publicvoid test1() { WeekDay weekDay = WeekDay.MON; System.out.println(weekDay.nextDay()); } |
SUN |
枚举的基本应用
最简单的枚举应用
package com.naxsu.enumtest; import org.junit.Test; publicclass EnumTest { publicenum EWeekDay{ SUN,MON,TUE,WED,THI,FRI,SAT } @Test publicvoid test2() { EWeekDay weekDay = EWeekDay.FRI; System.out.println(weekDay); System.out.println(weekDay.name()); System.out.println(weekDay.ordinal()); System.out.println(EWeekDay.valueOf("SUN")); System.out.println(EWeekDay.values().length); } } |
FRI FRI 5 SUN 7 |
带构造方法的枚举
/** * 带构造方法的枚举 */ publicenum EWeekDay{ //枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。 SUN(1),MON(),TUE,WED,THI,FRI,SAT; //构造方法必须定义成私有的 private EWeekDay(){ System.out.println("调用无参构造方法"); } private EWeekDay(int day){ System.out.println("调用有参构造方法"); } } |
带有抽象方法的枚举
/** * 带有抽象方法的枚举 */ publicenum TrafficLamp{ RED(30) { @Override public TrafficLamp nextLamp() { returnGREEN; } },GREEN(45) { @Override public TrafficLamp nextLamp() { returnYELLOW; } },YELLOW(5) { @Override public TrafficLamp nextLamp() { returnRED; } }; publicabstract TrafficLamp nextLamp(); privateinttime; private TrafficLamp(int time){ this.time=time; } } |
项目应用举例
package com.naxsu.enumtest;
publicenum Gender { MAN{ public String getName(){return"男";} },WOMEN{ public String getName(){return"女";} }; publicabstract String getName(); } |
本文链接:http://www.656463.com/portal.php?mod=view&aid=83,转载请注明出处
相关问答
更多-
完整简体中文版的Java (JDK 6)学习笔记 PDF[2023-03-09]
再好的学习笔记也是别人的,没有比API更好的东西了。 -
JAVA学习笔记适合零基础学习吗?[2023-10-25]
我在书店,图书馆看到过此书,感觉我不适合用此书,当然这并不绝对,也许你可以。我初学JAVA用得是《Java程序设计经典教程(融合上机操作实例)》此书非常基础,绝对的零基础。基本达到手把手的地步。再者《JAVA面向对向编程》也很好,此书对JAVA的语言点讲解比较全面。 -
java中如何实现枚举[2022-03-30]
好久没碰C了,都不太记得清枚举了。Java里面好像是没有和C一样的枚举类型的,这种类似的功能可以使用Java的枚举工具类实现。名字好像是叫“Enumeration”。 -
Java学习,一个枚举类型例题[2022-06-08]
compareToAction(Action.valueOf(args[0])); 很显然,这一句中的args数组内容为空,args[0]就会报数组越界错误。 这里需要你在运行的时候把args[0]的值传进去,像这样运行: java EnumCompareTo 参数放在这里,回车就可以正常运行了。比如: java EnumCompareTo abc -
java学习笔记林信良操作题答案[2024-02-22]
jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。 jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。 jstat 命令 ... -
学习java,想买台笔记本,请帮助推荐几款[2022-01-17]
其他无所谓,CPU稍稍好点,然后配个大内存,至少3GB,你想想,开个MyEclipse跑半个小时就能上七八百兆,MySQL三四百,SQLServer更恐怖,偶尔开个PS之类的也不小,所以做Java,大内存是比较有必要的。 -
准备学习 java做一个码农。 需要一个笔记本 求什么配置 别说越高越好,[2024-01-04]
编程机器要求不高,一般5000以内i5级别8G内存满足。做代码和做图形不一样,做代码理论CPU高和内存大即可! -
《Head first Java》和《Java学习笔记》比较 200分[2023-06-23]
两本书我都有过,java学习笔记是我自己买的,Head first java是老师让我们买的,不过现在早不知扔哪去了,怎么说呢,两的的风格相差比较大,而且都比较基础,如果硬是要从两者中比较好坏,我还是比较倾向于前者,知识点全面一点,但不太适合作长期的参考,可以作入门,Java学习笔记也是入门书籍,感觉字大,内容少,讲的不深,要作长期的java基础参考书买本java编程思想到是挺不错,就是有点枯燥 -
java学习笔记[2023-06-21]
大家的笔记 http://student.csdn.net/space.php?do=blog 牛人的笔记 http://lavasoft.blog.51cto.com/all/62575 我的笔记 http://student.csdn.net/space.php?uid=209919&do=blog&view=me -
java学习笔记 林信良 怎么样[2022-09-07]
入门级没问题,若是想以后从事这方面工作,建议买《编程艺术》,工作中需要大量的io流,文件等操作,这个我感觉非常棒。 望采纳~~