`
zhengjunwei2007_163.com
  • 浏览: 130879 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdk6 enum枚举总结

    博客分类:
  • JAVA
阅读更多

一。

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 );

 

分享到:
评论

相关推荐

    java中enum枚举的详细用法

    Java中的枚举(enum)类型是在JDK 1.5版本引入的一个强大的特性,它用于定义一组相关的常量。在C/C++等语言中,枚举通常用来表示一组具有固定值的常量集合,但在Java中,枚举不仅限于此,它提供了更多的功能和灵活性...

    说说Java中的枚举 转 可以了,够了 包括EnumSet(Map)

    首先,枚举定义的基本语法是`public enum EnumName {constant1, constant2, ...}`。每个枚举常量都是`EnumName`类的实例,且它们是唯一的,不可变的。枚举类自动继承了`java.lang.Enum`类,因此可以拥有方法和字段,...

    javaenum(枚举)使用详解+总结.pdf

    Java中的枚举(enum)是自JDK 1.5版本引入的一种强大的类型,它用于定义一组相关的常量。枚举在Java中被设计为一种特殊的类,它们默认继承自`java.lang.Enum`抽象类,并且是单继承的,这意味着它们无法再继承其他类...

    MLDn学习笔记 —— JDK新特性(枚举)

    在Java编程语言中,JDK的新特性之一是枚举(Enum)。枚举是一种特殊的类,它提供了一种安全的方式来表示一组固定数量的常量。在本文中,我们将深入探讨枚举类型及其在JDK中的应用。 一、枚举的定义与使用 1. 基本...

    Java JDK6(中文版)

    2. **枚举类型(Enum)**:JDK6增强了对枚举的支持,使得枚举更加灵活且易于使用。开发者可以定义枚举类,添加方法,实现接口,使枚举在面向对象编程中扮演了更重要的角色。 3. **自动装箱与拆箱**:在JDK6中,基本...

    JDK5.0新特性(3)——枚举

    总结,JDK 5.0的枚举特性使得常量管理更加规范和安全,同时也为编程带来了许多便利。结合反射API,我们可以更好地操控枚举,实现更灵活的代码设计。在实际项目中,合理运用枚举可以提高代码的可读性和可维护性。对于...

    枚举类型的说明 enum

    枚举类型是 JDK 5.0 的新特征,Sun 引进了一个全新的关键字 enum 来定义一个枚举类。枚举类型是一种特殊的类,实际上 enum 声明定义的类型就是一个类,这些类都是类库中 Enum 类的子类(java.lang.Enum)。它们继承...

    JDK5.0新特性 常量 、枚举、 for each、反射

    总结起来,JDK 5.0引入的常量注解、枚举、for each循环和反射特性,极大地丰富了Java语言的特性和表达能力,提升了开发效率和代码质量。通过理解并熟练应用这些特性,开发者可以编写出更加高效、安全和易于维护的...

    掌握JDK1.5枚举类型

    Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我们应该注意到enum类型有如下的一些特征。 1....

    jdk6学习笔记(17,18,19,20,21)

    JDK 6对枚举类型进行了增强,支持枚举常量之间的比较,可以实现Comparable接口,还引入了枚举套接字(EnumSet)和枚举映射表(EnumMap),这两个集合类专门用于枚举类型的存储,提供了高效且安全的操作。...

    JDK6API中文参考

    1. **枚举类型(Enum)**:JDK 6引入了枚举类型,可以更好地表示一组固定的常量,提供比传统常量更安全、更强大的功能。 2. **动态代理(Dynamic Proxy)**:通过`java.lang.reflect.Proxy`和`java.lang.reflect....

    JDK 6 java 学习笔记的代码

    2. **枚举类型(Enum)的增强**:在JDK 6中,枚举类型被赋予了更多的功能,如可以拥有方法和字段,可以实现接口,甚至可以定义枚举常量之间的关系。这极大地提高了枚举的可读性和可维护性。 3. **可变参数(Varargs...

    java枚举类型enum的使用

    枚举类型自 JDK 1.5 开始引入,为开发者提供了一种更加安全、简洁的方式来处理一组固定的数据集合。枚举中的每个元素都是该枚举类型的对象实例,并且具有以下特点: 1. **不可变性**:枚举中的元素是 `final` 和 `...

    2022年掌握JDK1.5枚举类型Java教程.docx

    Java中的枚举类型(Enum)是在JDK 1.5版本中引入的一种特殊的类类型,它的设计目的是为了更好地管理和使用一组固定的常量。枚举在Java中提供了比传统的final常量更安全、更灵活的机制。以下是关于Java枚举类型的一些...

    java 枚举类总结

    ### Java 枚举类总结 #### 一、概述与基本概念 枚举类型(`enum`)是Java中的一种特殊类,它允许开发者定义一组命名的常量,并将其视为一个独立的类型。从JDK 1.5版本开始,Java引入了枚举类型,它提供了一种更加...

    JDK-6u45-Windows 32位

    1. **增强的语言特性**:Java 6引入了多项语言层面的改进,如自动资源管理(try-with-resources)、枚举套件(enum sets)、改进的泛型类型推断以及简化I/O流的try-catch-finally结构。 2. **性能优化**:JDK 6通过...

    JDK5一些新特性关于枚举泛型等

    总结起来,JDK 5的枚举类型和泛型特性提高了代码的安全性,降低了类型转换错误,增强了代码的可读性和可维护性。它们是现代Java编程不可或缺的部分,对于任何Java开发者来说,理解和掌握这些特性都是非常重要的。

    《Java JDK 6 学习笔记》配书示例

    3. **枚举类型(enum)**:Java 6中枚举类型成为一种完全类型,支持方法定义,枚举常量可以作为switch语句的分支,增强了枚举的安全性和灵活性。 4. **静态导入(static import)**:允许开发者直接引用类中的静态...

    java学习笔记JDK6课件之十一

    Java学习笔记JDK6中的第11章主要讲解了枚举类型(enum)这一特性,它是Java语言中用于创建固定数量、预定义的常量集合的构造。枚举类型是面向对象编程的一个重要概念,它提供了强类型的安全性和代码的清晰性。 1. ...

    枚举(switch、覆盖枚举、实现接口等)

    6. 使用接口组织枚举: 在更复杂的应用场景中,枚举可以按照接口组织。`Food`接口定义了两个枚举类型`Coffee`和`Dessert`,它们都实现了`Food`接口。这种方式使得枚举可以根据类别进行分组,方便管理和使用。 枚举...

Global site tag (gtag.js) - Google Analytics