转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
Eclipse3.1中体验J2SE 5.0之枚举类型         ★★★★

Eclipse3.1中体验J2SE 5.0之枚举类型

作者:闵涛 文章来源:闵涛的学习笔记 点击数:783 更新时间:2009/4/22 23:29:39
天极软件专题专区精选 Google专区 POPO专区 QQ专区 Flash MX 视频教程 Photoshop视频教程 网页设计视频教程 PowerPoint动画演示教程 Excel动画教程集 Word动画演示教程 特洛伊木马专区 黑客知识教程专区 注册表应用专区 Windows API开发专区 网络编程专区 VB数据库编程专区 图像与多媒体编程    
  本文将介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注释类型, 范型, 并在此基础上介绍在如何在Eclipse 3.1开发环境中开发枚举类型, 注释类型和范型应用。

  J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步.

  J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱(autoboxing), 可变个数参数(varargs), 静态导入(static imports), 以及新的线程架构(Thread framework).

  随着J2SE 5.0的推出, 越来越多的集成开发环境(IDE)支持J2SE 5.0的开发. 著名的开源Java IDE Eclipse从3.1M4开始支持J2SE 5.0的开发, 目前最新的版本是3.1RC4.

  本系列将介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注释类型, 范型, 并在此基础上介绍在如何在Eclipse 3.1开发环境中开发枚举类型, 注释类型和范型应用.本文将介绍枚举类型.

  1. 枚举类型

  1.1枚举类型简介

  J2SE 5.0 以及之前的JDK有两种基本方法可以来定义新类型:通过Classes 以及Interface. 对于大部分面向对象编程来说,这两种方法看起来似乎足够了.但是在一些特殊情况下,这些方法就不适合.例如,我们想定义一个类型 Priority, 它只能接受 High, Medium, Low 三种值. 其他任何值都是非法的.J2SE 5.0 以前的JDK是可以构造这种类型的,但是需要做很多工作,有可能会带来如不安全(类型安全性问题???)等潜在问题,而J2SE 5.0的枚举类型(Enum) 能避免这些问题.

  Eclipse 是JAVA程序员最常用的开发平台,而Eclipse 3.1提供对J2SE 5.0的支持,它为J2SE 5.0的新功能提供了帮助工具.在对枚举类型的支持上,它不仅提供了枚举类型的创建模板,而且为枚举类型的各种开发错误提供错误提示及帮助修改.

  本文首先介绍枚举类型的创建基本概念以及如何在Eclipse 3.1平台上创建枚举类型,然后我们通过在Eclipse 3.1开发环境中的例子来说明枚举类型的应用.

  1.2 创建枚举类型

  下面的例子显示了如何创建一个最基本的枚举类型:

  清单 1. 枚举类型的定义

 
public enum Priority {High, Medium, Low }; 

  它包括一个关键字enum ,一个新枚举类型的名字 Priority 以及为Priority定义的一组值.

  在Eclipse 3.1平台上,按照下面步骤来生成枚举类型:(Eclipse 3.1提供了一个新的枚举类型创建向导(wizard)以方便用户创建枚举类型)

  1) File->New->Other, 模板列表显示出来.

  2) 在模板列表上选中 Java->Enum, 点击 Next 按钮

  3) 按图 1填写每一个域 如下:

  图 1: Eclipse 3.1 枚举类型创建模板

图 1: Eclipse 3.1 枚举类型创建模板

  4) 点击 Finish 按钮, 生成Priority 的类(定义???), 并声明Priority 的每一个值,如下图 2所示:(High, Medium, low从何而来???)

  图 2: 枚举类型Priority

图 2: 枚举类型Priority

  在创建枚举类型时,注意几个重要的概念.

  • 所有创建的枚举类型都扩展于 java.lang.Enum. Enum 是在J2SE 5.0 里定义的一个新类, 它本身不是枚举类型.在创建枚举类型时,必须用enum 关键字,不能直接地定义一个继承Enum的类来创建一个枚举类型,尽管所有创建的枚举类型实际上都是Enum 的子类. 如果直接继承Enum, compiler 就会报错(会导致编译错误).如图3 所示

    图3. 直接继承Enum 类

    图3. 直接继承Enum 类

  • 枚举类型里定义的每一个值都是枚举类型的一个实例,比方说High是Priority的一个实例.枚举类型又是扩展于Enum. 所以枚举类型的每一个值声明时, 缺省时都将映射到Enum(String name, int ordinal) 构造函数中.换句话说,enum Priority {High, Medium, Low } 的实现是调用了下面的Enum 构造函数:

    清单2 映射的构造函数调用

     
      new Enum< Priority >("High", 0); 
      new Enum< Priority >("Medium", 1); 
      new Enum< Priority >("Low", 2); 
    

      每一个创建的枚举类型都是Enum 的子类,除了上面调用父类 Enum 的构造函数外,枚举类型可以使用参数为定义一些自己的构造函数.当声明值时,只需调用此枚举类型定义的构造函数,而且不必添加 new 关键字.在清单3里, Priority 的一个实例生成,这个实例就是High (38).


    清单3.其它构造函数调用
     
     enum Priority { 
        High (38), 
        Medium(36.5), 
        Low (5.2); 
        double temperature; 
        Priority (double p)  
                temperature = p; 
       } 
    

      另外要强调的两点: 一是这些枚举类型的构造函数都是私有的.它是不能被其它的类或者其它的枚举类型调用的. 而且这个私有修饰符是由编译器自动加的,如果我们定义这些构造函数时,在前面加上public 修饰符, 就会导致编译错误, 如下图5所示. 二是变量定义必须在枚举类型值定义之后. 上图中double temperature 必须在枚举类型值定义完了(分号表示枚举类型值定义完了, 如 Low(5.2);) 才能声明.

    图4. 枚举类型的构造函数是私有的

    图5. 枚举类型的构造函数是私有的

  • 在J2SE 5.0以前,当我们实现一个枚举类时,一般都是把一个整数关联到此枚举类的某一个值的名字,出现的问题是同一个整数可以代表不同枚举类的值. 下面的例子里定义两个枚举类 Course and Grade 如下:


    清单4.
     
    public class Course { 
         public static final int EnglishLit       = 1; 
         public static final int Calculus         = 2; 
         public static final int MusicTheory      = 3; 
         public static final int MusicPerformance = 4; 
       } 
    public class Grade { 
      public static final int A = 1; 
      public static final int B = 2; 
      public static final int C = 3; 
      public static final int D = 4; 
      public static final int F = 5; 
      public static final int INCOMPLETE = 6; 
    } 
    

    如果开发者误把student1.assignGrade(Grade.A)写成student1.assignGrade(Course.EnglishList); 在编译 阶段是不能发现问题的,如果用J2SE 5.0 枚举类型(enum)可以避免这些问题.

  • 枚举类型每一个值都是public, static and final的.也就是说,这些值是唯一的而且一旦定义了是不能被重写或修改.而且尽管在枚举类型每一个值声明时没有出现static关键字, 实际上值都是静态的, 而且我们不能在值前面加上static, public,final 修饰符,否则就会出现下图 6的错误.

    图5 枚举类型值的错误声明

    图6 枚举类型值的错误声明

  • 枚举类型都实现了java.lang.Comparable,枚举类型的值是可以比较排序的,排列顺序就是枚举类型定义这些值的顺序.


共2页。 1 2 8 :




没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台