`
iwebcode
  • 浏览: 2008518 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

(OTHER)java Enum学习

 
阅读更多

1. 关于 Java Enum:

学过 C/C++ 等语言的人,应该都对 Enum 类型略知一二。 Enum 一般用来表示一组相同类型的常量。如性别、日期、月份、颜色等。 对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用 ”==” 来替换 equals , 是一种好的习惯。 JDK1.5 之前没有 Enum 这个类型,那时候一般用接口常量来替代。有了 JavaEnum 之后, 可以更贴近的表示这种常量。

2. 如何使用 Java Enum

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

public enum SexEnum {
   male , female ;
}

颜色:

public enum Color {
   RED , BLUE,GREEN,BLACK ;
}

枚举对象里面的值都必须是唯一的。可以通过 Enum 类型名直接引用该常量,如 SexEnum.male,Color.RED.

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


1. 代码一
WeekDay.java :

/**
 * @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;
 }
}

2.代码二
WeekDayTest.java:

/**
 * @author yubing.linyb
 * 2009.7.29
 * 测试枚举类型WeekDay.
 */
public class WeekDayTest {
  public static void main(String args[]) {
      for (WeekDay day : WeekDay.values()) {
         System.out.println(day + "====>" + day.getDay());
      }
      WeekDay.printDay(5);
  }
}

输出结果为:
Mon====>Monday
Tue====>Tuesday
Wed====>Wednesday
Thu====>Thursday
Fri====>Friday
Sat====>Saturday
Sun====>Sunday
Fri

3.Java Enum 原理Java Enum类型的语法结构尽管和 java 类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum.WeekDay (javap WeekDay 命令之后得到的内容如下 ( 去掉了汇编代码 ) :
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开发全套达内学习笔记(含练习)

    making sure that classes know about other classes only through their APIs. declare [java] 声明 [di'klєә] default (关键字) 默认值; 缺省值 [di'fɒ:lt] delimiter 定义符; 定界符 Encapsulation[java] ...

    Java 高级特性.doc

    象以后我门在学习JAVA 的时候,一定要对每个知识点要慢慢的消化吃透,切不能走马观花。一个知识点必须要反复的动手练习,不然很难理解其中的奥秘所在的! 5.在JAVA的程序中,我经常性的看到字符前面有@这种标志的...

    Effective Java 3rd edition(Effective Java第三版英文原版)附第二版

    Item 62: Avoid strings where other types are more appropriate Item 63: Beware the performance of string concatenation Item 64: Refer to objects by their interfaces Item 65: Prefer interfaces to ...

    Thinking in Java 4th Edition

    Using other components ............. 50 The static keyword ..................... 51 Your first Java program ....... 52 Compiling and running ............... 54 Comments and embedded documentation .......

    Design and Implementation Voip Service On Open IMS and Asterisk Servers

    Telkom Institute of Technology , Bandung 40257 West Java-INDONESIA Email : rnd@ittelkom.ac.id. 1) effan_86@yahoo.com 2) , asm@ittelkom.ac.id 3) , rrm@ittelkom.ac.id 4) ABSTRACT Asterisk and Open ...

    reconstant:在编程语言之间共享常量定义,并使常量再次常量

    支持的输出包括C / CPP头文件,Python3(使用enum模块),Python2,Javascript,VueMixins和Java。 这仍然是一个在制品。 可以在github上打开有问题的问题,或者在PR上支持其他语言。 例子 创建一个输入文件 test....

    Hibernate注释大全收藏

    具体的java.sql.Clob, Character[], char[] 和 java.lang.String 将被持久化为 Clob 类型. java.sql.Blob, Byte[], byte[] 和 serializable type 将被持久化为 Blob 类型。 @Lob public String getFullText() { ...

    python3.6.5参考手册 chm

    Other Language Changes New Modules secrets Improved Modules array ast asyncio binascii cmath collections concurrent.futures contextlib datetime decimal distutils email encodings enum ...

    Google C++ Style Guide(Google C++编程规范)高清PDF

    Other C++ Features Reference Arguments Function Overloading Default Arguments Variable-Length Arrays and alloca() Friends Exceptions Run-Time Type Information (RTTI) Casting Streams Preincrement and ...

    KISDJ语音聊天

    enum Command { Invite, //Make a call. Bye, //End a call. Busy, //User busy. OK, //Response to an invite message. OK is sent to //indicate that call is accepted. Null, //No command. } 当用户...

Global site tag (gtag.js) - Google Analytics