J2SE5.0新特性之枚举类型

Java技术平台指南:J2SE、J2EE和J2ME深入教程 本文还有配套的精品资源,点击获取 简介:Java技术是IT领域的基石之一,本压缩包提供企业级应用(J2EE)、移动设备应用(J2ME)和个人电脑应用(J2SE)的详细指南。J2SE 6.0提供了核心编程接口,增强了内存管理和文件系统操作。J2EE 1.5简化了企业级应用开发,并加强了Web服务支持。J2ME 2.5专为嵌入式设备设计,扩展了用户界面和设备连接能力。这些文档为... 阅读详情
J2SE5.0新特性之枚举类型

 在传统的设计中,为了达到c、c++的枚举的功能,我们一般在类中声明几个常量:

public static final String BELLE_XISHI = “西施”;

public static final String BELLE_WANGZHAOJUN = “王昭君”;

public static final String BELLE_DIAOCHAN = “貂禅”;

public static final String BELLE_YANGGUIFEI = “杨贵妃”;

 

然而,这样做有些问题:

1.       不是类型安全的:因为被声明为String类型,您可以给它们赋值任意的字符串,而且,有可能两个常量的值相同。

2.       没有命名空间:为了区别与非分类,我们定义的常量以BELLE做前缀。

3.       脆弱:一旦被编译后,如果想插入常量,或者他们的顺序和值被更改,使用它们的程序需要重新编译。

4.       打印值代表的意义不明显。

 

现在,在新的Java语言中,已经可以使用枚举类型解决上面的问题,我们首先以一个例子来看一下枚举类型是怎么工作的。
  1. package com.kuaff.jdk5;
  2.  
  3. public class EnumShow1
  4. {
  5.     enum Belle
  6.     {
  7.         西施, 
  8.         貂禅, 
  9.         王昭君, 
  10.         杨贵妃,
  11.     }
  12.     
  13.     public static void main(String[] args)
  14.     {
  15.         EnumShow1 show = new EnumShow1();
  16.         for (Belle belle : Belle.values())
  17.         {
  18.             System.out.printf("美女的名字=%s%n", belle);
  19.         }
  20.     }
  21. }
  22.  

这里定义了一个枚举类型Belle(美女)。它四个值:西施、貂禅、王昭君和杨贵妃。注意,这里的值可是中文。

通过Belle.values()方法可以得到Belle枚举类型的所有的值,它返回一个包含Belle值的数组。

这样我们就可以通过belle.getName()或者belle.toString()得到枚举值。

 

注意:这里用到了printf方法和Foreach类型的循环,在后面的文章中会对这些新特性进行介绍。

 

事实上,每个枚举值可以设置多个参数,我们将上面的例子扩充一下:
  1. package com.kuaff.jdk5;
  2.  
  3. public class EnumShow2
  4. {
  5.     enum Belle
  6.     {
  7.         西施("春秋战国", "范蠡,勾践,夫差"), 
  8.         王昭君("西汉", "刘?,毛延寿,呼韩邪单于"),
  9.         貂禅("三国", "吕布,董卓"), 
  10.         杨贵妃("唐朝", "李隆基");
  11.         private final String empire;
  12.         private final String mans;
  13.         private Belle(String empire, String mans)
  14.         {
  15.             this.empire = empire;
  16.             this.mans = mans;
  17.         }
  18.     }
  19.     public static void main(String[] args)
  20.     {
  21.         EnumShow2 show = new EnumShow2();
  22.         for (Belle belle : Belle.values())
  23.         {
  24.             System.out.printf("美女的名字:%s,  生活年代:%s,  美女身后的相关男人:%s%n",belle,belle.empire,belle.mans);
  25.         }
  26.     }
  27. }
  28.  

在这个例子中,我们为每位美人都加了一个生活年代和相关的男人这两个参数。

这里必须有Belle(String empire, String mans)这样一个构造方法。对每个枚举值,可以象使用对象一样使用它,要得到它的参数,可以通过  枚举对象.参数   方式访问。如果反编译以下它的类,事实上,java编译器也是把它编译成一个类:

static class EnumShow2$Belle extends Enum

{

       …

}

 

以上两个例子可以在Eclipse 3.1M3下编译通过,现在的Eclipse3.1M3已经对JDK5达到了97%的支持。

 

既然它被编译成了类,我们也会联想到,类可以有方法的,枚举类型是不是页支持方法内呢?是!

我们在扩充一下上面的例子,为每个美人增加一个显示其生平事件的方法:
  1. package com.kuaff.jdk5;
  2.  
  3. public class EnumShow3
  4. {
  5.     enum Belle
  6.     {
  7.         西施("春秋战国", "范蠡,勾践,夫差")
  8.         {
  9.             String mainEvent()
  10.             {
  11.                 return "为勾践,嫁夫差,与范蠡泛西湖终老";
  12.             }
  13.         }, 
  14.         王昭君("西汉", "刘?,毛延寿,呼韩邪单于")
  15.         {
  16.             String mainEvent()
  17.             {
  18.                 return "毛延寿,不厚道,刘?不走访基层,不听群众意见,昭君和亲,青冢埋芳泽";
  19.             }
  20.         }, 
  21.         貂禅("三国", "吕布,董卓")
  22.         {
  23.             String mainEvent()
  24.             {
  25.                 return "红颜真祸水乎?男人好色而已!";
  26.             }
  27.         }, 
  28.         杨贵妃("唐朝", "李隆基")
  29.         {
  30.             String mainEvent()
  31.             {
  32.                 return "温泉在,佳人无,长生殿内暗伤神,却闻凤凰东度。";
  33.             }
  34.         }
  35.         ;
  36.  
  37.         private final String empire;
  38.  
  39.         private final String mans;
  40.  
  41.         private Belle(String empire, String mans)
  42.         {
  43.             this.empire = empire;
  44.             this.mans = mans;
  45.         }
  46.         abstract String mainEvent();
  47.          
  48.         
  49.     }
  50.  
  51.     public static void main(String[] args)
  52.     {
  53.         EnumShow3 show = new EnumShow3();
  54.  
  55.         for (Belle belle : Belle.values())
  56.         {
  57.             System.out.printf("美女的名字:%s,  生活年代:%s,  美女身后的相关男人:%s%n",belle,belle.empire,belle.mans);
  58.             System.out.printf("   相关事件:%s%n", belle.mainEvent() );
  59.         }
  60.     }
  61. }
  62.  

我们为每个美人增加了一个方法String mainEvent();同时,我们也必须在此枚举类型内增加一个抽象的方法声明:abstract String mainEvent();

和类型一样,通过 枚举对象.方法(…)  来调用枚举类型的方法。

 

上面的例子在eclipse 3.1M3下显示有错误,因为目前的eclipse还认为抽象方法只能在抽象类中声明,没关系,在命令行中直接编译吧: javac -source 5 -target 5 -d bin src/com/kuaff/jdk5/EnumShow3.java。
Python实现支付宝转账接口 由于工作需要使用python开发一个自动转账接口,记录一下开发过程。 首先需要在蚂蚁金服上申请开通开发者账户,有了开发者账户就可以使用沙箱进行开发了。 在开发之前我们需要在沙箱应用中填写密钥,密钥的获取可以使用阿里提供的工具包自动生成。 前期准备工作完成了,接下来是编写代码部分。主要用到了python-alipay-sdk库,使用pip安装即可,如果安装的过程中遇到问题推荐使用Anaconda... 阅读详情

相关推荐

电机控制易混知识点1-基波频率/载波频率/采样频率

在电机控制学习工作中会接触到很多专业名词,其中基波频率,载波频率,采样频率是最常接触到的,特别对于电机控制小白开说,不容易理解,现对这几个概念做下总结归纳。

新能源电机控制工程师 | 聚焦实战问题,搭建互助平台 分享电机控制代码调试、现场故障排查、算法优化中的真实困惑;开放讨论电机基础知识以及工作中遇到难点等共性难题。拒绝单向输出,只做工程师的“技术树洞”与“解忧杂货铺”! 2195

[转载]在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第一部分 :枚举类型

在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第一部分 :枚举类型本文将介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注释类型, 范型, 并在此基础上介绍在如何在Eclipse 3.1开发环境中开发...

congji3817的博客 151

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2476

J2SE5.0新特性

[1]J2SE5.0新特性之静态导入J2se5.0之前,如果需要使用其他类的静态方法,如java.lang.Math中的方法,需要写以下的代码:double value = Math.log(100)*Math.PI; 现在你只需在静态导入,然后就可以直接在代码中使用静态方法和静态字段:import static java.lang.Math.*;…double value = log(100

Jerome Kwok网络日志 1044

数字IC后端先进工艺设计实现之TSMC 12nm 6Track工艺数字IC后端实现重点难点盘点

如果你仅仅是跑个先进工艺的flow,不懂先进工艺在数字IC后端实现上的不同点,为何有这样的不同点,针对这些不同之处后端实现阶段如何考虑它们,那么你等于0经验!大家可以针对本文所列的要点进行复盘,如果这些都搞透彻了,你就可以大胆把T12 nm的A72和A55项目写到你的简历中。T12这个工艺也是支持Preferred和Non-prefered两个方向来完成routing的,但是它对它们的最小线宽和最小线间距提出了更严格的要求。所有各个子模块的形状,彼此之间的间距都是有严格的要求。为何要有P48这一层?

weixin_37584728的博客 8342

自由曲面与衍射光学元件DOE:从基础理论到工业应用的全景解析

本文全景解析了自由曲面与衍射光学元件的核心理论与工业应用。文章深入探讨了自由曲面在非对称光学设计中的灵活性及其数学描述与制造挑战,并阐述了衍射光学元件通过微纳结构进行波前相位调制的原理与多样化功能。两者与经典光学互补融合,共同构成了高端成像、智能照明、激光加工及AR/VR等前沿领域的底层技术支柱。

devops8pract的博客 392

J2SE 5.0新特性

J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步.    J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱(autoboxing), 可变个数参数(varargs)...

zhangyong_ok的博客 186

实测对比:DINOv2、CLIP、ResNet在图像相似度任务上谁更强?(含Python代码与避坑指南)

本文通过实测对比DINOv2、CLIP和ResNet在图像相似度任务中的表现,提供Python代码实现与避坑指南。实验结果显示,DINOv2在精度上表现最佳,CLIP在多模态场景中优势明显,而ResNet则在计算效率上更优。文章还针对不同业务场景给出了具体选型建议,帮助开发者在图像搜索和版权检测等项目中做出更明智的技术决策。

weixin_30588381的博客 290

J2SE5.0学习所得

  1. 公共jre与jdk下的jre区别:Jdk下的jre bin中多了一个server,而公共jre的bin目录下面只有一个client. Server 与 Client选项的差别在于所使用的VM不同,执行java程序时默认会使用client VM. 若使用server VM,会花费较长的启动时间及消耗较多的内存,为的是启动Java后能获得较好的执行效率。2. J2SE5.0增加了

Daemon_neu的专栏 1467

我的PCB设计经验总结及最容易犯错的100例之二B07

本文总结了PCB设计中的常见错误及解决方法。作者通过记录自身及他人的设计失误,系统归纳了高频、隐蔽且致命的问题,如电容中间穿线、高速信号跨分割、锐角布线等。重点提出从错误中提炼规律,建立分类案例库,并开发自动化检查工具的方法。案例涵盖高速信号处理、电源设计、EMC防护等关键领域,强调通过原理理解和实践验证提升设计质量。文章建议工程师建立个人错误数据库,从被动纠错升级为主动预防,最终形成系统化的设计方法论,提高PCB一次成功率。

启芯硬件的博客 88

逻辑回归:利用Python实现二分类算法

通过使用Python编写的代码,我们可以训练逻辑回归模型并进行预测。接下来,我们将实现逻辑回归算法的训练函数。训练函数将接受训练数据集X和对应的标签y,以及学习率alpha和迭代次数num_iterations。训练完成后,我们可以使用训练得到的参数theta来进行预测。在这个例子中,我们有一个包含4个样本的训练数据集X,每个样本有两个特征。在这个例子中,如果预测概率大于等于0.5,则预测为类别1,否则预测为类别0。现在,我们可以使用训练函数来训练模型。根据给定的样本x_new,预测函数将返回相应的类别。

XlltEditor的博客 326

Sun向公众公开新版Java“J2SE 5.0”

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 552

FPGA实践教程: 使用HLS将C程序生成IP核心进行FPGA开发

请根据您使用的FPGA开发板和供应商选择适当的HLS工具,并按照他们的安装指南进行安装。根据您使用的FPGA开发板和供应商选择适当的HLS工具,并按照他们的安装指南进行安装。通过本教程,您了解了如何使用HLS工具将C程序生成IP核心,并将其用于FPGA开发。在HLS项目中,您可以对C程序进行设计和优化,以生成对应的IP核心。在HLS项目中,您可以对C程序进行设计和优化,以生成相应的IP核心。将导出的IP核心导入到FPGA项目中。使用FPGA开发环境的菜单中的"导入"或"添加文件"选项导入IP核心。

CqpFsharp的博客 455

J2SE 5.0新功能

1.   Generic Types在5.0以前,当我们需要从集合类当中提取出某个元素时,需要显式的对他进行下塑造型,如ArrayList list = new ArrayList();         list1.add(0, new Integer(42));          int total = ((Integer)list1.get(0)).intValue();  在5.0当中,通过

技术源于生活 2324

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

J2SE 1.5版本的新特性一览

到了2003的年末,J2SE1.5的beta版本就将发布了。这次发布和现在已经发布的J2SE1.4的两个更新1.4.1和1.4.2都如2003年的JavaOne大会预期的发布。如果你没有参加这次大会,或者想重新回顾一下,那么下面就是这次大会的简要内容。J2SE 1.4.1 and 1.4.2 Releases当1.4.1(开发代号“Hopper”)在2002年9月发布以及它的后续版本1.4.2(开

1157

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Sun公司的Java平台最新版本J2SE 5.0

100多个新特性使J2SE 5.0成为Java开发者的新一代平台    (2004年10月9日讯) Sun Microsystems公司正式发布Java 2平台标准版(J2SE™) 5.0版。作为通过JCPsm(Java Community Process sm)研发的最大规模的项目之一,有大约160位专家成员参与了J2SE 5.0版本的研发。J2SE 5.0提供了100多个新特性,为

首席技术执行官CTO(Chief Technology Officer)|技术总监--邓斌博客 2417

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Sun的Java平台最新版本J2SE 5.0开始发货

Sun Microsystems公司正式发布Java 2平台标准版(J2SE™) 5.0版。作为通过JCPsm(Java Community Process sm)研发的最大规模的项目之一,有大约160位专家成员参与了J2SE 5.0版本的研发。J2SE 5.0提供了100多个新特性,为广大开发商带来诸多好处:易用性、高性能和高缩放能力、系统监控与管理,以及丰富的客户桌面功能等。从易用性和各个破记

农民田园 1286

深入浅出J2SE 5.0 枚举类型(aka Enum>)

原作者: Matt Quail (a.k.a. Spud) 翻译自:http://madbean.com/blog/2004/3/ 原作基于 http://creativecommons.org/licenses/by/2.0/ 翻译者 xangd xangd@yahoo.com.cn “奉天呈运,Tiger昭曰:Enum将是经过命名的常量,而不再是一堆令人困惑的整数,钦此” 那么,欢呼吧!!!

吾欲乘风 1521

在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第三部分 :范型

邹青 (qingzou@cn.ibm.com), 软件工程师, IBM 中国软件开发中心普及运算部门吴嫣 (wuyan@cn.ibm.com), 软件工程师, IBM 中国软件开发中心普及运算部门吴疆 (wujiangj@cn.ibm.com), 软件工程师, IBM 中国软件开发中心普及运算部门2005 年 7 月 01 日本文将介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注

sdbany的专栏 828

J2SE 1.5 in a Nutshell 中文版

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 510

[转载]在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第二部分 :注释类型

在 Eclipse 3.1 中体验 J2SE 5.0 的新特性: 第二部分 :注释类型本文将介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注释类型, 范型, 并在此基础上介绍在如何在Eclipse 3.1开发环境中开发...

congji3817的博客 180

J2SE 5.0的三个新特性

这里介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注释类型, 范型.J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步.J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxi

北冥之鲲 853

J2SE 5.0 的新特性

参考这个 : http://www.ibm.com/developerworks/cn/java/j-tiger-eclispe1/       J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的支持, 枚举类型(enumeration)的支持, 元数据(metadata)的支持, 自动拆箱(unboxing)/装箱(autoboxing), 可变个数参数(v

lin49940的专栏 643
上一篇: JDK1.5 注释语法(Annotations)新鲜试用
下一篇: J2SE5.0新特性之Foreach
start_java
博客等级 码龄22年 5粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值