当前位置: 代码迷 >> Java相关 >> java 枚举类总结 Enum
  详细解决方案

java 枚举类总结 Enum

热度:470   发布时间:2016-04-22 19:52:56.0
java 枚举类小结 Enum

好久没有接触枚举类了,差不多都忘了,今天抽出个时间总结一下吧。说实话,枚举类确实能够给我们带来很大的方便。

说明:枚举类它约定了一个范围,可以理解成只可以生成固定的几个对象让外界去调用,故枚举类中的构造方法都是private类型的。进而求其次,究竟枚举类到底有何特殊之处呢?

呈上代码一览(本人也是java Android 领域的菜鸟,如有错误之处,希望大家能够给以指点)

 1 /** 2  * 测试枚举类 3  * @author Administrator 4  * @Date   2015-8-3 5  */ 6 public class EnumTest { 7     public static void main(String[] args) { 8         Person person1 = Person.MAN; 9         System.out.println(person1);10         Person.MAN.work();11         Person.WOMEN.work();12         13     }14     //测试Person的values()方法15     public static void testValues(){16         Person []persons = Person.values();17         for(Person p:persons){18             19             System.out.println(p);20             21         }22             23     }24     //测试Person的valuesof()方法25     public static void testValuesOf(){26         Person person2 = Person.valueOf("MAN");27         System.out.println(person2);28     }29 }30 /**31  * 测试接口32  * @author Administrator33  * @Date   2015-8-334  */35 interface PersonExtends{36     void work();37 }38 /**39  * 枚举类40  * @author Administrator41  * @Date   2015-8-342  */43 enum Person implements PersonExtends{44     MAN("zhangsan","12"){45         public void work(){46             System.out.println("能干体力活,承受得住重量");47         }48         49     },WOMEN("lisi","13"){50         public void work(){51             52             System.out.println("职场白领居多,能者居之");53         }54     };55     private String name;56     private String age;57     private Person(String name,String age){58         this.name = name;59         this.age = age;60     }61     public String getName() {62         return name;63     }64     public void setName(String name) {65         this.name = name;66     }67     public String getAge() {68         return age;69     }70     public void setAge(String age) {71         this.age = age;72     }73     public void method(){74         System.out.println("The person is liming");75     }76     @Override77     public String toString() {78         // TODO Auto-generated method stub79         return super.toString();80     }81     @Override82     public void work() {83         // TODO Auto-generated method stub84         System.out.println("男人和女人工作的强度不同");85     }86     87 }

说明一下我以上代码的几个关键的因素:

1.以前不太明白枚举类中一开始的对象如何去写,其实很简单,只是原始类的缩写而已。看如下代码:

private final Person2 MAN = new Person2("zhangsan","12");

其实枚举类中的对象和这个写法是一样的,只不过在enum声明的类中不能够这么写。可以这样理解,既然枚举类已经限定了范围,只能在枚举类中new对象,故构造方法是private类型,外界也不允许修改,故它就是不变的,所以声明成为final类型,对象初始化,这点相信大家都知道的。然而在enum中,已经知道这种约定,所以enum类中不允许这样写,把默认的都删掉,有点类似接口中的final static 。所以就剩下MAN("zhangsan","12")。强调一点,枚举对象必须写在类的开头。

2.在测试枚举类中,引用枚举类的对象相信大家一看就能明白。还有两个方法说明一下,一是values方法,取得枚举类中定义的枚举类的对象,返回的是一个枚举类的集合。如上依次遍历。。。其次是valuesof方法,根据名字获取枚举类型的对象,强调一下,valuesof(String str)中的参数必须是枚举类中对象的名字,否则将会报异常。

今天有点晚了。。明天再做更新啦。。

 

  相关解决方案