Java Enum(枚举一)的用法

Java Enum(枚举)的用法

 

Enum: 用来表示一组相同类型的常量

 

定义一个枚举:

Java代码   收藏代码
  1. public enum WeekDay {  
  2.   
  3.     //最好全大写,因为枚举类型的值是public static final的  
  4.     MON("Monday"), TUE("Tuesday"), WED("Wednesday"), THU("Thursday"),   
  5.         FRI("Friday"), SAT("Saturday"), SUN("Sunday");  
  6.   
  7.     //定义枚举类型的属性  
  8.     private final String day;  
  9.   
  10.     /* 
  11.      * 构造器只能是private,不允许有public构造器,这样可以保证外部代码无法新 构造枚举类的实例, 
  12.      * 因为我们知道枚举值是public static final的常量 
  13.      */  
  14.     private WeekDay(String day) {  
  15.         this.day = day;  
  16.         //验证获取枚举常量时会被调用  
  17.         System.out.println("The constructor is invoked !");  
  18.     }  
  19.   
  20.     //普通方法  
  21.     public String getDay() {  
  22.         return day;  
  23.     }  
  24. }  

 

WeekDayTest 测试类:

Java代码   收藏代码
  1. public class WeekDayTest {  
  2.       
  3.     public static void main(String[] args) {  
  4.   
  5.         //通过WeekDay.枚举常量 获取枚举常量,此时会初始化所有枚举常量,会调用构造器  
  6.         WeekDay weekDay = WeekDay.WED;//调用构造方法,输出结果:七句 The constructor is invoked !  
  7.   
  8.         //获取枚举属性,通过普通方法getDay()  
  9.         System.out.println(weekDay.getDay());//输出结果:Wednesday  
  10.   
  11.         //enum常用方法  
  12.   
  13.         //1.toString()方法,返回枚举常量的名称  
  14.         System.out.println(weekDay.toString());//输出结果:WED  
  15.         System.out.println(weekDay);//会调用toString()方法,输出结果:WED  
  16.   
  17.         //2.name()方法,返回枚举常量的名称  
  18.         System.out.println(weekDay.name());//输出结果:WED  
  19.   
  20.         //上面两种方法都是返回枚举常量的名称,但是API推荐使用toString()方法  
  21.   
  22.         //3.values()静态方法,返回全部枚举常量的数组  
  23.         for (WeekDay wd : WeekDay.values()) {  
  24.             System.out.print(wd + " ");//输出结果:MON TUE WED THU FRI SAT SUN  
  25.         }  
  26.   
  27.         //4.ordinal()方法返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)  
  28.         System.out.println(weekDay.ordinal());//输出结果:2  
  29.   
  30.         //5.1 valueOf(String name)静态方法,返回带指定名称的指定枚举类型的枚举常量(完全匹配)  
  31.         System.out.println(WeekDay.valueOf("SUN"));//输出结果:SUN  
  32.   
  33.         //5.2 valueOf((Class<T> enumType,String name)静态方法,返回带指定名称的指定枚举类型的枚举常量(完全匹配)  
  34.   
  35.         //使用方法1(类.class方法)  
  36.         System.out.println(WeekDay.valueOf(WeekDay.class"MON"));  
  37.   
  38.         //使用方法2(枚举常量.getgetDeclaringClass()方法返回与此枚举常量的枚举类型相对应的 Class 对象)  
  39.         //不能使用枚举常量.getClass()方法 注:java官方api有说明  
  40.         System.out.println(WeekDay.valueOf(weekDay.getDeclaringClass(), "SUN"));//输出结果:SUN  
  41.   
  42.         //6.compareTo(E o) 比较此枚举与指定对象的顺序  
  43.         System.out.println(WeekDay.MON.compareTo(weekDay));//输出结果:-2  
  44.   
  45.         //枚举类型可以在switch语句中使用 下面的输出结果:WED  
  46.         switch (weekDay) {  
  47.         case MON:  
  48.             System.out.println("MON");  
  49.             break;  
  50.         case TUE:  
  51.             System.out.println("TUE");  
  52.             break;  
  53.         case WED:  
  54.             System.out.println("WED");  
  55.             break;  
  56.         default:  
  57.             System.out.println("default");  
  58.         }  
  59.     }  
  60. }  

 

枚举作为类的属性,给类中的枚举属性赋值问题

 

Clothes类有枚举类型的color属性

 

Java代码   收藏代码
  1. /** 
  2.  *  
  3.  * @author 陈孝礼 
  4.  * @date 2013-12-18 
  5.  */  
  6. public class Clothes {  
  7.   
  8.     private Color color;  
  9.   
  10.     public enum Color {  
  11.         RED("红色"1), GREEN("绿色"2), BLANK("白色"3), YELLOW("黄色"4);  
  12.   
  13.         // 成员变量  
  14.         private final String name;  
  15.         private final int index;  
  16.   
  17.         // 构造方法  
  18.         private Color(String name, int index) {  
  19.             this.name = name;  
  20.             this.index = index;  
  21.         }  
  22.   
  23.         public String getName() {  
  24.             return name;  
  25.         }  
  26.   
  27.         public int getIndex() {  
  28.             return index;  
  29.         }  
  30.     }  
  31.   
  32.     public Color getColor() {  
  33.         return color;  
  34.     }  
  35.   
  36.     public void setColor(Color color) {  
  37.         this.color = color;  
  38.     }  
  39.   
  40.     //返回枚举类型的name属性  
  41.     public String getColorName() {  
  42.         return color != null ? this.color.getName() : "";  
  43.     }  
  44.   
  45.     public static void main(String[] args) {  
  46.   
  47.         Clothes clothes = new Clothes();  
  48.         //Color c = Color.BLANK;  
  49.         //1.使用枚举常量给Clothes的color属性赋值  
  50.         String s = "blank";  
  51.         //Boolean flag = false;  
  52.         clothes.setColor(Color.valueOf(s.toUpperCase()));  
  53.         //clothes.setColor(Color.valueOf(Color.class, s.toUpperCase()));  
  54.         System.out.println(clothes.getColor().toString());//BLANK  
  55.         System.out.println(clothes.getColorName());//白色  
  56.         System.out.println(clothes.getColor().getIndex());//3  
  57.         /* 
  58.         for (Color c : Color.values()) { 
  59.             //忽略大小写匹配枚举常量名称 
  60.             if (s.equalsIgnoreCase(c.toString())) { 
  61.                 clothes.setColor(Color.valueOf(s.toUpperCase())); 
  62.                 //clothes.setColor(Color.valueOf(Color.class, s.toUpperCase())); 
  63.                 System.out.println(clothes.getColor().toString());//BLANK 
  64.                 System.out.println(clothes.getColorName());//白色 
  65.                 System.out.println(clothes.getColor().getIndex());//3 
  66.                 flag = true; 
  67.             } 
  68.         } 
  69.         if (flag.equals(Boolean.FALSE)) { 
  70.             System.out.println("参数和枚举常量的名称不匹配"); 
  71.         } 
  72.          
  73.         //2.使用枚举常量的index属性来标识进行赋值 
  74.         int i = 1; 
  75.         flag = false; 
  76.         for (Color c : Color.values()) { 
  77.             if (i == c.getIndex()) { 
  78.                 clothes.setColor(Color.valueOf(c.toString())); 
  79.                 //clothes.setColor(Color.valueOf(c.class, color.toString())); 
  80.                 System.out.println(clothes.getColor().toString());//RED 
  81.                 System.out.println(clothes.getColorName());//红色 
  82.                 System.out.println(clothes.getColor().getIndex());//1 
  83.                 flag = true; 
  84.             } 
  85.         } 
  86.  
  87.         if (flag.equals(Boolean.FALSE)) { 
  88.             System.out.println("参数和枚举常量的index属性不匹配"); 
  89.         } 
  90.  
  91.         //3.使用枚举常量的name属性来标识进行赋值,略...... 
  92.         */  
  93.     }  
  94. }  

 

 其他类可以直接引入Clothes类的枚举类型

Java代码   收藏代码
  1. import cxl.Clothes.Color;  
  2.   
  3. public class TestImportEnum {  
  4.       
  5.     public static void main(String[] args) {  
  6.           
  7.         for(Color color : Color.values()) {  
  8.             System.out.println(color.toString() + " : " + color.getName());  
  9.         }  
  10.   
  11.     }  
  12. }  

 

输出结果

Java代码   收藏代码
  1. RED : 红色  
  2. GREEN : 绿色  
  3. BLANK : 白色  
  4. YELLOW : 黄色  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值