Java Enum 枚举类型

Java Enum

Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals 。是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型。

枚举类型安全,可以不让非法的数据作为参数传入。

枚举是类,可以实现接口,并且是常用的实例化控制手段(可以理解为对象池),很多单例写成枚举。

还可以在枚举中声明抽象方法,在不同的枚举值中实现该方法,以达到工厂方法的目的。

  

  如何使用 Java Enum


  简单的用法: JavaEnum 简单的用法一般用于代表一组常用常量,可用来代表一类相同类型的常量值。如:

//性别
public enum SexEnum { 
  male , female ; 
}
//颜色
public enum Color { 
  RED , BLUE,GREEN,BLACK ; 
}

  枚举对象里面的值都必须是唯一的。

  可以通过 Enum 类型名直接引用该常量,如 SexEnum.male,Color.RED.

  复杂用法: Java 为枚举类型提供了一些内置的方法,同事枚举常量还可以有自己的方法。可以很方便的遍历枚举对象,看个下面的例子:

  

//WeekDay.java
/**
 * @author admin 定义一个枚举类型,代表星期一到星期日的7个缩写常量 同时还定义了枚举类型的属性day,该属性可以是final,也可是变量
 *         同时还定义了该枚举类型的一个方法printDay
 */
enum WeekDay {
<span style="white-space:pre">	</span>Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri("Friday"), Sat("Saturday"), Sun("Sunday");


<span style="white-space:pre">	</span>/** 定义枚举类型自己的属性 **/
<span style="white-space:pre">	</span>private final String day;


<span style="white-space:pre">	</span>private WeekDay(String day) {
<span style="white-space:pre">		</span>this.day = day;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>public String getDay() {
<span style="white-space:pre">		</span>return day;
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>/*//定义枚举类型自己的方法
<span style="white-space:pre">	</span>public static void printDay(int i) {
<span style="white-space:pre">		</span>switch (i) {
<span style="white-space:pre">		</span>case 1:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Mon);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case 2:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Tue);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case 3:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Wed);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case 4:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Thu);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case 5:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Fri);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case 6:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Sat);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>case 7:
<span style="white-space:pre">			</span>System.out.println(WeekDay.Sun);
<span style="white-space:pre">			</span>break;
<span style="white-space:pre">		</span>default:
<span style="white-space:pre">			</span>System.out.println("wrong number!");
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}*/


}

// WeekDayTest.java
public class WeekDayTest {
<span style="white-space:pre">	</span>public static void main(String args[]) {
<span style="white-space:pre">		</span>for (WeekDay d : WeekDay.values()) {
<span style="white-space:pre">			</span>System.out.println(d + "====>" + d.getDay());
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>//WeekDay.printDay(5);
<span style="white-space:pre">	</span>}
}
<pre name="code" class="java" style="color: rgb(69, 69, 69); font-size: 14px; line-height: 24px;">//输出结果为:
Mon====>Monday
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
 


如果只是个1,2个常量 ,就别用构造函数,直接

Java code
?
1
2
3
enum  FruitEnum {
     APPLE, ORANGE;
}

当还有其他值得时候用构造函数如下:
Java code
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

enum  FruitEnum {
     APPLE( 1 , "红色" ), ORANGE( 2 , "黄色" );   
 
     private  int  value =  0 ;
     private  String desc;
     private  FruitEnum( int  value,String desc) {   
         this .value = value;
         this .desc = desc;
     }
 
     public  static  FruitEnum valueOf( int  value) {   
         for  (FruitEnum f:FruitEnum.values()) {
             if (f.value==value) return  f;
         }
         return  null ;
     }
 
     public  int  value() {
         return  this .value;
     }
     
     public  static  void  main(String[] args) {
         
     }
}

这时候用构造函数才优雅。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值