jdk6 enum枚举总结

一。

jdk5 和 jdk6 中引入了enum类型,java.lang.Enum implements comparable ,Serializable 。

java.uti.concurrent.TimeUnit工具类的实现,jdk5 和 jdk6有明显区别;

 

jdk6中定义七种枚举: NANOSECONDS MICROSECONDS MILLISECONDS SECONDS MINUTES HOURS DAYS , 每一种值中重写了9个public方法,可供对象和类静态调用,如:

    HOURS {
        public long toNanos(long d)   { return x(d, C5/C0, MAX/(C5/C0)); }
        public long toMicros(long d)  { return x(d, C5/C1, MAX/(C5/C1)); }
        public long toMillis(long d)  { return x(d, C5/C2, MAX/(C5/C2)); }
        public long toSeconds(long d) { return x(d, C5/C3, MAX/(C5/C3)); }
        public long toMinutes(long d) { return x(d, C5/C4, MAX/(C5/C4)); }
        public long toHours(long d)   { return d; }
        public long toDays(long d)    { return d/(C6/C5); }
        public long convert(long d, TimeUnit u) { return u.toHours(d); }
        int excessNanos(long d, long m) { return 0; }
    },

TimeUnit.HOURS.toDays(30L) 返回1L ;

 

jdk5中定义4种枚举: ANOSECONDS(0)  MICROSECONDS(1) MILLISECONDS(2) SECONDS(3) ,通过构造TimeUnit(int index)属性index值。包含一些静态 和 对象方法,

 

jdk6 的Timeunit的使用:

TimeUnit.values();

TimeUnit.DAYS.toHours(2)

TimeUnit unit=TimeUnit.HOURS ; unit.toDay说(24); unit.convert(1, TimeUnit.DAYS)

TimeUnit.HOURS.convert(1, TimeUnit.DAYS)

 

引用如下:http://blog.csdn.net/abing37/archive/2009/07/29/4391222.aspx

二. 原理:

实际上 Enum 类型就是以 Java 类来实现的,没有什么新的特点,只不过 java 编译器帮我们做了语法的解析和编译。完全也可以自己实现。

对象,看个下面的例子:

 

1.        代码一 WeekDay.java :

 

view plaincopy to clipboardprint?
 /** 
 * @author yubing.linyb 
 * 2009.7.29 
 * 定义一个枚举类型,代表星期一到星期日的7个缩写常量 
 * 同时还定义了枚举类型的属性day,该属性可以是final,也可是变量 
 * 同时还定义了该枚举类型的一个方法printDay 
 */ 
public enum WeekDay {  
Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri(  
        "Friday"), Sat("Saturday"), Sun("Sunday");  
 
/**定义枚举类型自己的属性**/ 
private final String day;  
   
private WeekDay(String day) {  
     this.day = day;  
}  
 
/**定义枚举类型自己的方法**/ 
public static void printDay(int i){  
     switch(i){  
     case 1: System.out.println(WeekDay.Mon); break;  
     case 2: System.out.println(WeekDay.Tue);break;  
     case 3: System.out.println(WeekDay.Wed);break;  
     case 4: System.out.println(WeekDay.Thu);break;  
     case 5: System.out.println(WeekDay.Fri);break;  
     case 6: System.out.println(WeekDay.Sat);break;  
     case 7: System.out.println(WeekDay.Sun);break;  
     default:System.out.println("wrong number!");  
     }  
}  
   
public String getDay() {  
     return day;  
}  

 

Java Enum 类型的语法结构尽管和 java 类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个 class 文件。该 class 文件经过反编译可以看到实际上是生成了一个类,该类继承了 java.lang.Enum<E>.

WeekDay (javap WeekDay 命令 之后得到的内容如下 ( 去掉了汇编代码 ) :

view plaincopy to clipboardprint?
public final class WeekDay extends java.lang.Enum{  
    public static final WeekDay Mon;  
    public static final WeekDay Tue;  
    public static final WeekDay Wed;  
    public static final WeekDay Thu;  
    public static final WeekDay Fri;  
    public static final WeekDay Sat;  
    public static final WeekDay Sun;  
    static {};  
    public static void printDay(int);  
    public java.lang.String getDay();  
    public static WeekDay[] values();  
    public static WeekDay valueOf(java.lang.String);  

三.

java Enum标识一组相同类型的常量,既能保证单例,比较时可以直接=,不用equal比较。

四。举例:

 

颜色:

public enum Color {

  RED , BLUE,GREEN,BLACK ;

}

 

 public enum EnumExample {
  male(1) , female(1) ;
  final int value ;
  EnumExample(int value){
   this.value = value ;
  }
  
 }

 

  EnumExample a = EnumExample.male ;
  System.out.println(a.name() + a.value );

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值