疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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 Administrator

  33 * @Date 2015-8-3

  34 */

  35 interface PersonExtends{

  36 void work();

  37 }

  38 /**

  39 * 枚举类

  40 * @author Administrator

  41 * @Date 2015-8-3

  42 */

  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 @Override

  77 public String toString() {

  78 // TODO Auto-generated method stub

  79 return super.toString();

  80 }

  81 @Override

  82 public void work() {

  83 // TODO Auto-generated method stub

  84 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)中的参数必须是枚举类中对象的名字,否则将会报异常。