Java SE学习之枚举总结

深碍√TFBOYSˉ_ 2022-08-14 00:53 225阅读 0赞

本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享。

最近在看Java基础方面的书的时候,又遇到了枚举的介绍。在网上查了一些资料,对这些资料进行一些总结。

用法一:常量

  1. package meiju;
  2. /**
  3. *
  4. * @ClassName: Color
  5. * @Description: 枚举变量的常量用法
  6. * @author zhangjunshuai junshuaizhang@163.com
  7. * @date 2014-11-16 下午07:29:40
  8. *
  9. */
  10. public enum Color {
  11. RED,GREEN,BLANK,YELLOW
  12. }

用法二:switch

  1. package meiju;
  2. /**
  3. *
  4. * @ClassName: Signal
  5. * @Description: 枚举的switch用法
  6. * @author zhangjunshuai junshuaizhang@163.com
  7. * @date 2014-11-16 下午07:33:32
  8. *
  9. */
  10. enum Signal{
  11. GREEN,YELLOW,RED
  12. }
  13. public class EnumForswitch {
  14. Signal color = Signal.RED;
  15. public void change(){
  16. switch(color){
  17. case RED:
  18. System.out.println("红色");
  19. break;
  20. case YELLOW:
  21. System.out.println("金黄色");
  22. break;
  23. case GREEN:
  24. System.out.println("绿色");
  25. break;
  26. default:
  27. System.out.println("最后");
  28. }
  29. }
  30. /**
  31. * @param args
  32. */
  33. public static void main(String[] args) {
  34. // TODO Auto-generated method stub
  35. }
  36. }

用法三:枚举中的方法

  1. package meiju;
  2. /**
  3. *
  4. * @ClassName: ColorMthod
  5. * @Description: 枚举的方法
  6. * @author zhangjunshuai junshuaizhang@163.com
  7. * @date 2014-11-16 下午07:35:09
  8. *
  9. */
  10. enum ColorMthod{
  11. RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
  12. private String name;
  13. private int index;
  14. //枚举的构造方法 介个是怎么一回事呢?
  15. private ColorMthod(String name,int index){
  16. this.name = name;
  17. this.index = index;
  18. }
  19. //普通方法
  20. public static String getName(int index){
  21. for(ColorMthod c : ColorMthod.values()){
  22. if(c.getIndex()== index){
  23. System.out.println(c.name);
  24. return c.name;
  25. }
  26. }
  27. return null;
  28. }
  29. public String getName() {
  30. return name;
  31. }
  32. public void setName(String name) {
  33. this.name = name;
  34. }
  35. public int getIndex() {
  36. return index;
  37. }
  38. public void setIndex(int index) {
  39. this.index = index;
  40. }
  41. }
  42. public class EnumMethod {
  43. /**
  44. * @param args
  45. */
  46. public static void main(String[] args) {
  47. ColorMthod.getName(1);
  48. }
  49. }

用法四:覆盖枚举方法

  1. package meiju;
  2. /**
  3. *
  4. * @ClassName: EnumMethodOverride
  5. * @Description: 覆盖方法
  6. * @author zhangjunshuai junshuaizhang@163.com
  7. * @date 2014-11-16 下午07:37:04
  8. *
  9. */
  10. public class EnumMethodOverride {
  11. public enum ColorMethod{
  12. RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLO("黄色",4);
  13. private String name;
  14. private int index;
  15. private ColorMethod(String name,int index){
  16. this.name = name;
  17. this.index = index;
  18. }
  19. @Override
  20. public String toString(){
  21. return this.index+"_"+this.name;
  22. }
  23. }
  24. /**
  25. * @param args
  26. */
  27. public static void main(String[] args) {
  28. // TODO Auto-generated method stub
  29. System.out.println(ColorMethod.RED);
  30. }
  31. }

用法五:实现接口

  1. package meiju;
  2. /**
  3. *
  4. * @ClassName: Behavior
  5. * @Description: 枚举实现接口
  6. * @author zhangjunshuai junshuaizhang@163.com
  7. * @date 2014-11-16 下午07:39:28
  8. *
  9. */
  10. interface Behavior{
  11. void print();
  12. String getInfo();
  13. }
  14. enum ColorInterface implements Behavior{
  15. RED("红色",1),GREEN("绿色",2),BLANK("白色",3),YELLOW("黄色",4);
  16. private String name;
  17. private int index;
  18. private ColorInterface(String name,int index){
  19. this.name = name;
  20. this.index = index;
  21. }
  22. public String getInfo(){
  23. return this.name;
  24. }
  25. public void print(){
  26. System.out.println(this.index+":"+this.name);
  27. }
  28. }
  29. public class EnumInterface {
  30. /**
  31. * @param args
  32. */
  33. public static void main(String[] args) {
  34. // TODO Auto-generated method stub
  35. ColorInterface.RED.print();
  36. }
  37. }

用法六:枚举集合的使用

  1. package meiju;
  2. import java.util.EnumMap;
  3. import java.util.EnumSet;
  4. /**
  5. *
  6. * @ClassName: EnumLIghtTest
  7. * @Description: 枚举的遍历
  8. * @author zhangjunshuai junshuaizhang@163.com
  9. * @date 2014-11-16 下午07:41:13
  10. *
  11. */
  12. public class EnumLIghtTest {
  13. //1.定义枚举类型
  14. public enum Light{
  15. //2.利用构造参数传参
  16. RED(1),GREEN(3),YELLOW(2);
  17. //定义私有变量
  18. private int nCode;
  19. // 构造函数,枚举类型只能为私用
  20. private Light(int _nCode){
  21. this.nCode = _nCode;
  22. }
  23. public String toString(){
  24. return String.valueOf(this.nCode);
  25. }
  26. }
  27. /**
  28. * @param args
  29. */
  30. public static void main(String[] args) {
  31. //1.遍历枚举类型
  32. System.out.println("演示枚举类型的遍历……");
  33. testTranversalEnum();
  34. //2.EnumMap对象的使用
  35. System.out.println("演示EnumMap对象的使用和遍历……");
  36. testEnumMap();
  37. //3.演示EnumSet的使用
  38. System.out.println("演示EnumSet对象的使用和遍历……");
  39. testEnumSet();
  40. }
  41. /**
  42. * 演示枚举类型的遍历
  43. */
  44. private static void testTranversalEnum(){
  45. Light[] allLight = Light.values();
  46. for(Light aLight : allLight){
  47. System.out.println("当前灯name:"+aLight.name());
  48. System.out.println("当前灯ordinal:"+aLight.ordinal());
  49. System.out.println("当前灯:"+aLight);
  50. }
  51. }
  52. /**
  53. * 演示EnumMap的使用,EnumMao跟HashMap的使用差不多,只是key值是枚举类型
  54. */
  55. private static void testEnumMap(){
  56. //1.演示定义EnumMap对象,EnumMap对象的构造函数需要参数传入,默认是key的类的类型
  57. EnumMap<Light,String> currEnumMap = new EnumMap<Light, String>(Light.class);
  58. currEnumMap.put(Light.RED, "红灯");
  59. currEnumMap.put(Light.GREEN, "绿灯");
  60. currEnumMap.put(Light.YELLOW, "黄灯");
  61. for(Light aLight :Light.values()){
  62. System.out.println("[key="+aLight.name()+",value="
  63. +currEnumMap.get(aLight)+"]");
  64. }
  65. }
  66. /**
  67. * 演示EnumSet如何使用,EnumSet是一个抽象类,获取一个类型的枚举类型内容
  68. *
  69. * 可以使用allOf方法
  70. */
  71. private static void testEnumSet(){
  72. EnumSet<Light> currEnumSet = EnumSet.allOf(Light.class);
  73. for(Light aLightSetElement :currEnumSet){
  74. System.out.println("当前EnumSet中数据为:"+aLightSetElement);
  75. }
  76. }
  77. }

用法七:用接口组织枚举

  1. public interface Food {
  2. enum Coffee implements Food{
  3. BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
  4. }
  5. enum Dessert implements Food{
  6. FRUIT, CAKE, GELATO
  7. }
  8. }

枚举相对于final static来说,枚举可以减少变量的定义,在switch中的使用有利于代码的执行效率,同时枚举可以自定义内置方法,还有就是枚举可以使用遍历方法。虽然枚举有一些优势但是枚举不是继承。

参考:

http://www.iteye.com/topic/1116193

http://blog.csdn.net/p106786860/article/details/11516269

发表评论

表情:
评论列表 (有 0 条评论,225人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java

    ine, 我写这个是因为在读Calendar的时候发现对枚举类(enum)的使用不熟悉。 使用原因 * 清晰明了。例如枚举类SeasonEnum表示的季节,它...

    相关 Java SE学习总结

    本文是学习网络上的文章时的总结以及自己的一点实践,感谢大家无私的分享。 最近在看Java基础方面的书的时候,又遇到了枚举的介绍。在网上查了一些资料,对这些资料进行一些总结。

    相关 JAVA ENUM总结

    原理分析(转)         enum 的语法结构尽管和 class 的语法不一样,但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到

    相关 Java

    1.定义 enum 是一种数据类型,与 全局常量比较相似,都是全局的并且是可以通过类名调用的 与全局常量区别 枚举功能更强大,可以有属性和方法

    相关 JAVA 总结

    1、枚举类的使用         ①枚举类的理解:类的对象只有有限个数,确定的。我们称此类为枚举类         ②当需要定义一组常量时,强烈建议使用枚举类