`

转载java枚举(enum)学习

 
阅读更多
 
  1. java枚举(enum)学习
  2. 来自:www.java1995.org 作者: 爪娃
  3. 2009-06-06 浏览(138) 评论(0) 发表评论
  4. 摘要: Java中的枚举是在JDK1.5才引进的,使用enum为关键字,是一种新的类型,允许用常量来表示数据片断。所有的枚举类型都是java.lang.Enum类的子类,枚举内的常量用‘,’分隔开,若后面还有语句,则最后一个常量后面要用‘;’,枚举...
  5. Java中的枚举是在JDK1.5才引进的,使用enum为关键字,是一种新的类型,允许用常量来表示数据片断。所有的枚举类型都是java.lang.Enum类的子类,枚举内的常量用‘,’分隔开,若后面还有语句,则最后一个常量后面要用‘;’,枚举中的常量默认都是publicstaticfinal,这就是为什么枚举中的常量建议全大写的原因,虽然它默认是publicstaticfinal,但你在声明常量时却不能显式使用publicstaticfinal,否则编译器反而会报错误。枚举常量实际就是格举类型的实例,它的初始化是依靠java.lang.Enum类的构造方法来的,见下:
  6. Java代码
  7. 1. // java.lang.Enum中定义的构造函数,
  8. 2. // 两个参数分别是定义的枚举常量名称以及它所在的次序。
  9. 3. protected Enum(String name, int ordinal) {
  10. 4.
  11. 5. this.name = name;
  12. 6.
  13. 7. this.ordinal = ordinal;
  14. 8.
  15. 9. }
  16. 第一个枚举常量的值默认是0,其它的依次加1.
  17. 下面先看下简单的枚举类的定义:
  18. Java代码
  19. 1. publicenum Colors{
  20. 2. RED,BLUE,GREEN,YELLOW,GRAY;
  21. 3. //GRAY后面若没有其它的语句,则其后面的分号可不写,若后面有语句则必须添加
  22. 4. }
  23. 下面看个简单的应用:
  24. Java代码
  25. 1. package com.iwtxokhtd.enums;
  26. 2.
  27. 3. /**
  28. 4. * @author Administrator
  29. 5. *
  30. 6. */
  31. 7. publicenum Colors {
  32. 8.
  33. 9. /**
  34. 10. * 定义一个颜色枚举类
  35. 11. */
  36. 12. RED,
  37. 13. GREEN,
  38. 14. BLUE,
  39. 15. YELLOW,
  40. 16. GRAY;
  41. 17. }
  42. 18. /**
  43. 19. * 测试枚举类型
  44. 20. */
  45. 21. package com.iwtxokhtd.enums;
  46. 22.
  47. 23. /**
  48. 24. * @author Administrator
  49. 25. *
  50. 26. */
  51. 27. publicclass EnumTest {
  52. 28.
  53. 29. publicstaticvoid printColor(Colors color){
  54. 30. //用switch,在jdk1.5以后其参数支持enum,而不仅仅是int,short,char,byte
  55. 31. switch(color){
  56. 32. case RED:
  57. 33. System.out.println("这是红色");
  58. 34. break;
  59. 35. case GREEN:
  60. 36. System.out.println("这是绿色");
  61. 37. break;
  62. 38. case BLUE:
  63. 39. System.out.println("这是蓝色");
  64. 40. break;
  65. 41. case YELLOW:
  66. 42. System.out.println("这是黄色");
  67. 43. break;
  68. 44. case GRAY:
  69. 45. System.out.println("这是灰色");
  70. 46. break;
  71. 47. default:
  72. 48. System.out.println("其它色");
  73. 49. }
  74. 50. }
  75. 51. publicstaticvoid main(String []args){
  76. 52. //打印蓝色
  77. 53. printColor(Colors.BLUE);
  78. 54. }
  79. 55. }
  80. 使用EnumMap
  81. EnumMap是为枚举类型定做的Map实现,它比其它的Map实现能更高效地完成枚举类型实例到值的映射,EnumMap内部使用枚举类型的ordinal()方法得到当前实例的声明次序。
  82. 见示例:
  83. Java代码
  84. 1. /**
  85. 2. * EnumMap测试
  86. 3. */
  87. 4. package com.iwtxokhtd.enums;
  88. 5.
  89. 6. import java.util.EnumMap;
  90. 7.
  91. 8. /**
  92. 9. * @author Administrator
  93. 10. *
  94. 11. */
  95. 12. publicclass EnumMapTest {
  96. 13.
  97. 14. private EnumMap<Colors,String> colors=new EnumMap<Colors,String>(Colors.class);
  98. 15. public EnumMapTest(){
  99. 16. colors.put(Colors.RED, "红色");
  100. 17. colors.put(Colors.BLUE, "蓝色");
  101. 18. colors.put(Colors.GRAY, "灰色");
  102. 19. colors.put(Colors.GREEN, "绿色");
  103. 20. colors.put(Colors.YELLOW, "黄色");
  104. 21. }
  105. 22. //取得颜色
  106. 23. public String getColor(Colors color){
  107. 24. return colors.get(color);
  108. 25. }
  109. 26. publicstaticvoid main(String []args){
  110. 27. System.out.println(new EnumMapTest().getColor(Colors.BLUE));
  111. 28. }
  112. 29.
  113. 30. }
  114. 枚举其实是个类,下面来看看枚举作为一个类的使用:
  115. 下面我们将以前的那些类定义放到一个类中,见代码:
  116. Java代码
  117. 1. /**
  118. 2. * 枚举改造
  119. 3. */
  120. 4. package com.iwtxokhtd.enums;
  121. 5.
  122. 6. import java.util.EnumSet;
  123. 7.
  124. 8. /**
  125. 9. * @author Administrator
  126. 10. *
  127. 11. */
  128. 12. enum AnotherColors{
  129. 13. RED,GREEN,BLUE,YELLOW,GRAY;
  130. 14. public String printColor(){
  131. 15. switch(this){
  132. 16. case RED:
  133. 17. return"这是红色";
  134. 18. case GREEN:
  135. 19. return"这是绿色";
  136. 20. case BLUE:
  137. 21. return"这是蓝色";
  138. 22. case YELLOW:
  139. 23. return"这是黄色";
  140. 24. case GRAY:
  141. 25. return"这是灰色";
  142. 26. default:
  143. 27. return"其它色";
  144. 28. }
  145. 29. }
  146. 30. }
  147. 31. publicclass OneClassTest {
  148. 32.
  149. 33. publicstaticvoid main(String []args){
  150. 34. //EnumSet.allOf()是指以AnotherColors的全部变量为Set的值,详情见JDK文档
  151. 35. for(AnotherColors color:EnumSet.allOf(AnotherColors.class)){
  152. 36. System.out.println("定义的颜色信息是:"+color.printColor());
  153. 37.
  154. 38. }
  155. 39. }
  156. 40. }
  157. 枚举类型也允许定义自己的构造方法如:
  158. Java代码
  159. 1. /**
  160. 2. * 枚举类型允许定义自己的构造方法
  161. 3. */
  162. 4. package com.iwtxokhtd.enums;
  163. 5.
  164. 6. import java.util.EnumSet;
  165. 7.
  166. 8. /**
  167. 9. * @author Administrator
  168. 10. *
  169. 11. */
  170. 12. enum ConstructorEnum{
  171. 13. RED("red","红色"),
  172. 14. GREEN("green","绿色"),
  173. 15. BLUE("blue","蓝色"),
  174. 16. YELLOW("yellow","黄色"),
  175. 17. GRAY("gray","灰色");
  176. 18.
  177. 19. //枚举类的字段或属性必须定义在枚举常量的后面
  178. 20. private String color;
  179. 21. private String message;
  180. 22. //默认是private型
  181. 23. ConstructorEnum(String color,String message){
  182. 24.
  183. 25. this.color=color;
  184. 26. this.message=message;
  185. 27. }
  186. 28. public String getColor() {
  187. 29. return color;
  188. 30. }
  189. 31. public String getMessage() {
  190. 32. return message;
  191. 33. }
  192. 34. }
  193. 35. publicclass NewEnumTest {
  194. 36.
  195. 37. publicstaticvoid main(String []args){
  196. 38. for(ConstructorEnum color:EnumSet.allOf(ConstructorEnum.class)){
  197. 39. System.out.println("颜色键为:"+color.getColor());
  198. 40. System.out.println("颜色值为:"+color.getMessage());
  199. 41. }
  200. 42. }
  201. 43. }
  202. 使用枚举类型注意事项:
  203. (1) 枚举类型不能使用extends关键字,但是可以使用implements关键字。这样我们可以把不同枚举类型共有的行为提取到接口中,来规范枚举类型的行为。
  204. (2) 枚举类型的自定义构造函数并不能覆盖默认执行的构造函数,它会跟在默认构造函数之后执行。
  205. (3) 枚举类型的自定义构造函数必须是私有的,但你不能显式加private,否则会出错
  206. (4)枚举类型中枚举常量的定义必须放在最上面,其后才能是变量和方法的定义。
  207. 下面学下枚举类的自定义方法,见代码:
  208. Java代码
  209. 1. /**
  210. 2. * 在枚举类里使用自定义方法
  211. 3. */
  212. 4. package com.iwtxokhtd.enums;
  213. 5.
  214. 6. import java.util.EnumSet;
  215. 7.
  216. 8. /**
  217. 9. * @author Administrator
  218. 10. *
  219. 11. */
  220. 12. enum MethodEnum{
  221. 13. RED{
  222. 14. publicvoid printColor(){
  223. 15. System.out.println("红色");
  224. 16. }
  225. 17. },
  226. 18.
  227. 19. GREEN{
  228. 20. publicvoid printColor(){
  229. 21. System.out.println("绿色");
  230. 22. }
  231. 23. },
  232. 24.
  233. 25. BLUE{
  234. 26. publicvoid printColor(){
  235. 27. System.out.println("蓝色");
  236. 28. }
  237. 29. },
  238. 30.
  239. 31. YELLOW{
  240. 32. publicvoid printColor(){
  241. 33. System.out.println("黄色");
  242. 34. }
  243. 35. },
  244. 36.
  245. 37. GRAY{
  246. 38. publicvoid printColor(){
  247. 39. System.out.println("灰色");
  248. 40. }
  249. 41. };
  250. 42. publicabstractvoid printColor();
  251. 43. }
  252. 44. publicclass MethodEnumTest {
  253. 45.
  254. 46. //测试使用自定义的方法来打印枚举类的常量值
  255. 47. publicstaticvoid main(String []args){
  256. 48. for(MethodEnum color:EnumSet.allOf(MethodEnum.class)){
  257. 49. color.printColor();
  258. 50. }
  259. 51. }
  260. 52. }
  261. 下面来看下,如何通过相关的数据反过来查找枚举类中的项,解释见下面的代码:
  262. Java代码
  263. 1. /**
  264. 2. * 通过相关的数据来查找对应的枚举项
  265. 3. */
  266. 4. package com.iwtxokhtd.enums;
  267. 5.
  268. 6. import java.util.EnumSet;
  269. 7. import java.util.HashMap;
  270. 8. import java.util.Map;
  271. 9.
  272. 10. /**
  273. 11. * @author Administrator
  274. 12. *
  275. 13. */
  276. 14. enum SearchEnum{
  277. 15. RED(0),
  278. 16. GREEN(1),
  279. 17. BLUE(2),
  280. 18. YELLOW(3),
  281. 19. GRAY(4);
  282. 20. //使用静态的Map把相关的数据与枚举项关联起来
  283. 21. privatestaticfinal Map<Integer,SearchEnum> search=new HashMap<Integer,SearchEnum>();
  284. 22. //把有的关联项放到Map里
  285. 23. static{
  286. 24. for(SearchEnum color:EnumSet.allOf(SearchEnum.class)){
  287. 25. search.put(color.getI(), color);
  288. 26. }
  289. 27. }
  290. 28. privateint i;
  291. 29. SearchEnum(int i){
  292. 30. this.i=i;
  293. 31. }
  294. 32. publicint getI(){
  295. 33. return i;
  296. 34. }
  297. 35. //查找
  298. 36. publicstatic SearchEnum get(int i){
  299. 37. return search.get(i);
  300. 38. }
  301. 39. }
  302. 40. publicclass SearchEnumTest {
  303. 41. //测试查找
  304. 42. publicstaticvoid main(String []args){
  305. 43. //查找BLUE
  306. 44. System.out.println(SearchEnum.get(2));
  307. 45. }
  308. 46. }
  309. 枚举的学习先到这里,注意:枚举在某些场合使用还是比较方便的,如:定义时间日期常量、颜色常量、身高离散常量、物品的尺寸等,但千万不要滥用。

 

分享到:
评论

相关推荐

    Java枚举类型Enum的用法

    Java枚举类型(Enum)是Java SE 5.0引入的一种新的数据类型,它为开发者提供了更为强大且安全的方式来表示一组常量。枚举在Java中不仅是一个类,还是一种特殊的类型,允许我们定义自己的常量集合。接下来,我们将...

    java enum 枚举 学习资料

    "Java Enum 枚举学习资料" Java Enum 枚举学习资料是 Java 编程语言中的一种特殊类型,它主要用来实现一组固定的常量。 Enum 枚举类型是 Java 5 中引入的一种新特性,旨在解决传统的 int 枚举常量的缺陷。 1. 枚举...

    Java SE程序 Enum枚举类

    Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类Java SE程序 Enum枚举类...

    高阶Java-Java枚举类型 enum 应用详解

    在Java编程语言中,枚举(enum)是一种特殊的类,用于定义一组固定的常量。它在许多场景下比使用常量或int类型的硬编码值更安全、更具可读性。本篇文章将深入探讨Java枚举的特性、用法以及如何在实际开发中充分利用...

    java枚举类型enum的使用

    ### Java 枚举类型 enum 的使用详解 #### 一、枚举类型概述 在 Java 中,枚举(enum)是一种特殊的类,它被用来表示一组固定的常量值。枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来...

    java枚举实例代码

    Java枚举(enum)是Java语言中的一种特殊数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中被引入,目的是为了更好地管理和使用常量,提高代码的可读性和安全性。在本实例代码中,...

    java中enum枚举的详细用法

    Java中的枚举(enum)类型是在JDK 1.5版本引入的一个强大的特性,它用于定义一组相关的常量。在C/C++等语言中,枚举通常用来表示一组具有固定值的常量集合,但在Java中,枚举不仅限于此,它提供了更多的功能和灵活性...

    java enum枚举教程学习资料

    Java枚举(enum)是Java语言提供的一种特殊的数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中是类的子类型,因此,它们具备类的一些特性,比如可以有方法、变量以及实现接口。...

    java 枚举(enum) 详解(学习资料)

    Java 枚举(enum)是 Java 语言中的一个重要特性,自 Java 5 开始引入。枚举用于定义一组相关的常量,这些常量通常代表一个有限的、预定义的值集合。枚举类是一种特殊的类,它具有以下特点: 1. **枚举类的声明**:...

    全面掌握java枚举类型(enum-type)1

    全面掌握 Java 枚举类型(enum type) Java 枚举类型是一种特殊的数据类型,它可以取有限个数的明确值。枚举类型的引入解决了 int 枚举模式和 String 枚举模式的缺点,提供了类型安全性、可读性和性能等优势。 ...

    Java中的枚举类型Enum示例源代码

    Java中的枚举类型`Enum`是面向对象编程中一种强大的工具,它允许程序员定义自己的常量集合。在Java中,枚举类型不是简单的常量数组,而是一种完整的类,具有类的所有特性,如方法、构造函数和继承。下面将详细探讨`...

    java 枚举学习心得

    总的来说,学习Java枚举不仅能够帮助我们编写更清晰、更安全的代码,还能提高程序设计的效率。通过深入理解枚举的特性和用法,可以更好地应对各种编程场景,尤其是在处理固定值集合或需要类型安全的场合。在Java EE...

    java枚举状态机

    Java枚举(Enum)状态机是一种使用枚举类型来实现状态转换逻辑的编程技术,它在Java编程中被广泛应用于管理对象的状态变化。状态机是一种模型,用于描述一个系统或对象在不同时间点可能存在的状态以及如何从一个状态...

    java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名

    枚举(Enumeration)是Java中的一个特殊类类型,用于定义一组常量。本项目"test-enum-demo-master"显然是一个用于演示如何通过反射来操作枚举类的示例。 首先,让我们理解枚举类的基本概念。枚举类在Java中用于定义...

    简单总结java枚举类型

    在Java中,枚举通过关键字`enum`来定义。例如,创建一个表示一周天的枚举类型如下: ```java enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 这里,`DayOfWeek`是...

    JAVA高级编程中Enum枚举

    本资源包提供了一些关于`Enum`枚举的深入学习材料,包括实例、常见问题以及相关的文档,非常适合Java开发者进行高级编程的学习和复习。 首先,枚举的基本语法是定义一个公共类,前面加上关键字`enum`。例如: ```...

    enum枚举的方法

    enum枚举的方法

    java枚举类型说明

    在Java编程语言中,枚举(Enum)作为一种重要的数据类型,在程序设计中扮演着不可或缺的角色。本文将深入探讨Java枚举类型的特性和用法,并通过具体实例说明其优势所在。枚举类型在Java中的引入标志着一种更为类型...

    java枚举类用法

    Java枚举类型(enum)是Java语言中一种特殊的类,用于定义一组固定的常量。它在许多场景下作为替代常量或单例模式的选择,提供了更安全、更易读的代码。下面我们将深入探讨Java枚举类的用法及其优势。 1. **枚举的...

    Java枚举(enum)类型深度解析:特性、用法与最佳实践

    在Java中,枚举(enum)类型是一种特殊的类,它定义了一组有限的常量。枚举类型提供了一种更清晰、更安全的方式来处理一组固定的常量值。本文将深入探讨Java枚举类型的特点、用法以及最佳实践。 Java中的枚举类型是...

Global site tag (gtag.js) - Google Analytics