<%@ page contentType="text/html; charset=gb2312"%> 如何掌握JDK1.5枚举类型
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

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

  1.它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。

  2.所有枚举值都是public , static , final的。注意这一点只是针对于枚举值,我们可以和在普通类里面定义 变量一样定义其它任何类型的非枚举变量,这些变量可以用任何你想用的修饰符。

  3.Enum默认实现了java.lang.Comparable接口。

  4.Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue”.

  5.Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法。

  6.Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值。

  7.Enum还有一个oridinal的方法,这个方法返回枚举值在枚举类种的顺序,这个顺序根据枚举值声明的顺序而定,这里Color.Red.ordinal()返回0。

  了解了这些基本特性,我们来看看如何使用它们。

  1.遍历所有有枚举值. 知道了有values方法,我们可以轻车熟路地用ForEach循环来遍历了枚举值了。

  for (Color c: Color.values())
  System.out.println(“find value:” + c);

  2.在enum中定义方法和变量,比如我们可以为Color增加一个方法随机返回一个颜色。

  public enum Color {
  Red,
  Green,
  Blue;

  /*
  *定义一个变量表示枚举值的数目。
  *(我有点奇怪为什么sun没有给enum直接提供一个size方法).
  */
  private static int number = Color.values().length ;

  /**
  * 随机返回一个枚举值
  @return a random enum value.
  */
  public static Color getRandomColor(){
  long random = System.currentTimeMillis() % number;
  switch ((int) random){
   case 0:
    return Color.Red;
   case 1:
    return Color.Green;
   case 2:
    return Color.Blue;
   default : return Color.Red;
  }
  }
  }

  可以看出这在枚举类型里定义变量和方法和在普通类里面定义方法和变量没有什么区别。唯一要注意的只是变量和方法定义必须放在所有枚举值定义的后面,否则编译器会给出一个错误。

  3.覆载(Override)toString, valueOf方法

  前面我们已经知道enum提供了toString,valueOf等方法,很多时候我们都需要覆载默认的toString方法,那么对于enum我们怎么做呢。其实这和覆载一个普通class的toString方法没有什么区别。

  ….
  public String toString(){
  switch (this){
  case Red:
   return "Color.Red";
  case Green:
   return "Color.Green";
  case Blue:
   return "Color.Blue";
  default:
   return "Unknow Color";
  }
  }
  ….
  这时我们可以看到,此时再用前面的遍历代码打印出来的是

  Color.Red
  Color.Green
  Color.Blue

  而不是

  Red
  Green
  Blue.

  可以看到toString确实是被覆载了。一般来说在覆载toString的时候我们同时也应该覆载valueOf方法,以保持它们相互的一致性。

  4.使用构造函数

  虽然enum不可以有public的构造函数,但是我们还是可以定义private的构造函数,在enum内部使用。还是用Color这个例子。

  public enum Color {
  Red("This is Red"),
  Green("This is Green"),
  Blue("This is Blue");

  private String desc;

  Color(String desc){
  this.desc = desc;
  }

  public String getDesc(){
  return this.desc;
  }

  }

  这里我们为每一个颜色提供了一个说明信息, 然后定义了一个构造函数接受这个说明信息。

  要注意这里构造函数不能为public或者protected, 从而保证构造函数只能在内部使用,客户代码不能new一个枚举值的实例出来。这也是完全符合情理的,因为我们知道枚举值是public static final的常量而已。

  5.实现特定的接口

  我们已经知道enum可以定义变量和方法,它要实现一个接口也和普通class实现一个接口一样,这里就不作示例了。

  6.定义枚举值自己的方法。

  前面我们看到可以为enum定义一些方法,其实我们甚至可以为每一个枚举值定义方法。这样,我们前面覆载 toString的例子可以被改写成这样。

  public enum Color {
  Red {
  public String toString(){
   return "Color.Red";
  }
  },
  Green {
  public String toString(){
   return "Color.Green";
  }
  },
  Blue{
  public String toString(){
   return "Color.Blue";
  }
  };
  }

  从逻辑上来说这样比原先提供一个“全局“的toString方法要清晰一些。

  总的来说,enum作为一个全新定义的类型,是希望能够帮助程序员写出的代码更加简单易懂,个人觉得一般也不需要过多的使用enum的一些高级特性,否则就和简单易懂的初衷想违背了
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
JAVA中的反射机制详解
JSP生成静态页面-Tomcat提高性能之王道
开源技术基础:教你如何熟练使用TOMCAT
WEBLOGIC6.0的一些使用经验
Jboss3.0-tomcat4.03的配置-4(数据库的配置)
Jboss3.0-Tomcat4.03配置-3(综合)
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(3715)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(3199)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(190)
        
不在的哪天!
final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil, max(7947)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(456)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(7762)
        
不想在乎你!
dofus kamas,dofus kamas,EVE ISK,dog shoes,pet supply, max(1761)
        
远方的你!
world of warcraft gold,wow gold,a href="http://www.gogoer.com">world of warcraft gold,cheap world of warcraft gold max(1971)
        
我想告诉你!
final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,world of warcraft gold,cheap world of warcraft gold max(4346)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号