熟练掌握JDK1.5枚举类型-Java基础-Java-编程开发

探索JDK5新特性:开启Java开发新纪元 本专栏深入讲解JDK5核心特性,包括自动装箱/拆箱、泛型、枚举、注解及并发编程,通过代码示例与实战项目帮助开发者掌握应用技巧。内容涵盖特性概述、基础理论到企业级项目实践,旨在提升1-3年经验开发者的Java能力,优化代码质量与性能。适合希望深入Java新特性并解决实际问题的开发者学习。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

在上一篇文章JDK1.5新特性简介里面,我们讨论了Enum的最简单形式,即类似于,

public enum Color{
Red,
Green,
Blue;
}

这篇文章我们来详细介绍一下enum的各项特征。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的一些高级特性,否则就和简单易懂的初衷想违背了。

(以上代码在win2k 1.5.0-beta2-b51下运行通过)

JDK5新特性概览:开启Java开发新时代 JDK5作为Java发展的重要里程碑,引入了多项创新特性,显著提升了开发效率和代码质量。主要特性包括:自动装箱/拆箱简化基本类型与包装类的转换;泛型增强类型安全性,避免运行时错误;枚举类型提供常量定义的新方式,提升代码可读性;注解支持元数据编程,扩展了代码功能;增强for循环优化集合遍历语法。这些特性各有适用场景,如泛型适用于多类型处理,而枚举适合固定值集合。虽然特性带来了便利,但在性能敏感场景仍需谨慎使用自动装箱等机制。JDK5的革新使Java保持了在编程语言中的竞争力。 阅读详情

相关推荐

C语言:结构体、共用体、枚举

结构体 1.1 结构体类型的定义 定义结构类型的一般形式为: struct 结构体名 {成员列表}; 成员列表由若干个成员组成,每个结构都是该成员的组成部分。 对每个成员都必须做类型说明,其形式为: 数据类型说明符 成员名; 成员名的命名应符合标识符的书写规则。 struct student { int num; char name; char sex; float score; }; 应注意在大括号后的分号是必不可少的,结构体定义之后,即可进行变量说明 对于结构体类型的几点说明 (1).结构体成员的类型可

weixin_47924016的博客 1513

熟练掌握JDK1.5枚举类型

熟练掌握JDK1.5枚举类型在上一篇文章JDK1.5新特性简介里面,我们讨论了Enum的最简单形式,即类似于,public enum Color{Red,Green,Blue;}这篇文章我们来详细介绍一下enum的各项特征。Enum作为Sun全新引进的一个关键字,看起来很象是特殊的class, 它也可以有自己的变量,可以定义自己的方法,可以实现一个或者多个接口。 当我们在声明一个enum类型时,我

王道JAVA 1230

JDK 1.5特性中文教程:提升Java开发效率

JDK 1.5,作为Java平台历史上的一个重要里程碑,不仅引入了众多强大的功能,更是对Java语言进行了革新。本章节旨在探讨JDK 1.5带来的一些关键特性,包括泛型编程、自动装箱与拆箱、枚举类型、增强型for循环、类型安全的可变参数以及静态导入等。通过深入分析这些特性,我们可以理解其背后的原理,以及如何在日常开发工作中有效地应用它们。在开始之前,让我们先简要回顾一下JDK 1.5之前的Java编程。

weixin_35755188的博客 1043

共用体、共用体与结构体的区别、枚举之C语言犄角旮旯的知识

在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠。[1]是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。把该类型变量所有可能的值都列举出来。在一些情况下,一个变量的值在一定范围内,是可以列举的。所以说枚举的类型一定是可以列举的值,也就是说一个整数值。......

勾栏听曲_0的博客 2875

JDK 1.5:Java编程里程碑的64位安装指南

Java开发工具包(JDK)1.5版本,又称为Java 5.0,在Java的发展历程中是一个重要的里程碑。它在2004年发布,引入了许多改进和新特性,极大地提升了Java编程的便利性和安全性。JDK 1.5版本对语言的核心特性进行了增强,包括泛型、自动装箱与拆箱、枚举类型以及注解等,使得Java更加现代化,符合程序员的开发习惯。Java泛型是在JDK 1.5版本中引入的,它是一种语言特性,允许程序员在编译时期检查类型安全,并减少了运行时类型转换的需求。

weixin_29607511的博客 822

Windows平台下的JDK 1.5安装与开发指南

在JDK 1.5之前,开发者通常使用final静态常量来表示固定的集合,或者使用整型常量模拟枚举类型。这种方式不仅代码可读性差,而且在类型安全方面存在缺陷。例如,当一个方法需要参数为特定的几个整数值时,传入非法值会导致程序出错。枚举类型(Enum)的引入,为这类问题提供了一个优雅的解决方案。枚举类型可以定义一组命名常量,是类和接口的特殊情况,它们都隐式继承自java.lang.Enum类。枚举类型可以增强代码的可读性,并提供类型安全保证。

weixin_42602241的博客 1137

java枚举优点

枚举优点 1 增强代码可读性 2传递参数错误 3去除equals两者判断由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。 4编译优势(与常量类相比) 常量类编译时,常量被直接编译进二进制代码中,常量值在升级中变化后,需要重新编译引用常量的类,因为二进制代码中存放的是旧值。枚举类编译时,没有把常量值编译到代码中,即使常量值发生改变,也不会影响引...

李度的博客 3164

JDK 1.5 64位版本:经典Java开发工具集及其特性

泛型类和接口是泛型机制的核心概念之一。它们允许我们在定义类或接口时使用类型参数,从而创建可适用于多种数据类型的通用代码。在上述代码中,Box<T>就是一个泛型类,其中T代表一个类型参数。使用时可以指定具体的类型,如。枚举类型(enum)是Java语言中一种特殊的类,它使变量的取值只能为一组预定义的常量中的一个。枚举类型可以看作是一个不可变的类,其中定义了有限数量的实例。每个实例都是唯一的,并且具有固定的类型安全。枚举类型可以拥有字段、方法和构造函数。

weixin_29092787的博客 1135

1-C语言之结构体、共用体、枚举

一、关键字说明         C语言有32个关键字,C语言通过关键字的使用使编译器进行相关的操作          结构体对应关键字struct          共用体(联合体)对应的关键字是union          枚举类型对应的关键字是enum 二、结构体、共用体(联合体)、枚举定义         结构体的定义:一种或多种基本类型或构造类型的数据的集合(构造类型)。  ...

YH3608的博客 1364

JDK 1.8 API编程详解文档

Java自1995年诞生以来,经历了多个版本的迭代,JDK 1.8作为一个重要的里程碑,引入了众多新的特性,极大地提升了Java语言的表达力和功能性。Java 1.8不仅改进了原有的集合框架,还引入了Lambda表达式、Stream API、新的日期时间API、增强的并发处理以及改进的反射机制等。本章节将深入探讨JDK 1.8的关键特性以及它们如何影响开发者的工作方式。JDK 1.8引入了Lambda表达式、新的日期时间API、Stream API和新的Concurrent API。

weixin_42588555的博客 675

JDK 1.5及其在Windows系统上的实现

JDK 1.5(也被称为Java SE 5.0)于2004年发布,标志着Java技术发展的一个新阶段。作为历史上较为重大的一个版本更新,它不仅解决了早期Java版本中存在的语言限制,还引入了大量增强语言表达能力的新特性。这些特性被后续版本所继承,为Java开发者带来了新的编程范式。泛型是JDK 1.5引入的一个重要特性,允许在编译时期提供类型安全的检查。泛型通过在类、接口和方法声明中使用类型参数来实现,这些类型参数在实例化时会被具体的类型替换。

weixin_29323977的博客 898

java枚举类型的实现原理

Java从JDK1.5开始支持枚举,也就是说,Java一开始是不支持枚举的,就像泛型一样,都是JDK1.5才加入的新特性。通常一个特性如果在一开始没有提供,在语言发展后期才添加,会遇到一个问题,就是向后兼容性的问题。像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这有个术语叫

痴人说梦 2万+

IMDb影评数据集:从下载到情感分析实战指南

本文提供了IMDb影评数据集从下载、探索到情感分析建模的完整实战指南。详细介绍了数据预处理、TF-IDF向量化方法,并对比了逻辑回归、随机森林、SVM及LSTM深度学习模型在情感分析任务上的应用与效果评估,帮助读者系统掌握自然语言处理的核心流程。

weixin_29052717的博客 448

Java:枚举类型

一个枚举类型是一种特殊的数据类型,使一个变量是一组预定义的常量。变量必须等于一个已经预定义的值。常见的例子包括罗盘方向(NORTH、SOUTH、EAST 和 WEST 的值)和一周的几天。因为它们是常量,枚举类型的字段的名称是大写字母。对于类的对象有限,并且确定的,才可以使用 枚举类型,如:星期:Monday(星期一)、…、Sunday(星期天)性别:Man(男)、Woman(女)季节:Spring(春节)…Winter(冬天)

weixin_61635597的博客 2413

实测有效!易灵思FPGA工程如何正确配置Efinity+Modelsim仿真环境

本文详细介绍了易灵思FPGA工程中如何高效配置Efinity与Modelsim联合仿真环境,包括软件版本匹配、系统环境变量设置、工程文件结构优化及仿真脚本深度优化等实战经验。通过实测数据验证,该方案可显著提升仿真效率,适用于不同规模的设计验证,帮助工程师快速搭建稳定高效的联仿环境。

m2n3b4v5c6的博客 405

单像素成像技术原理与Matlab仿真实现

傅里叶变换是数字图像处理的核心数学工具,它将图像从空间域转换到频率域表示。基于傅里叶频谱分析的成像技术通过采集关键频率分量实现图像重建,这种原理催生了单像素成像这一创新技术。单像素成像利用空间光调制器和单个探测器直接测量傅里叶系数,结合压缩感知算法实现高效成像,在红外、太赫兹等特殊波段展现出独特优势。通过Matlab仿真可以验证傅里叶基测量矩阵的构建、压缩感知重建等关键技术环节,为实际系统开发提供理论基础。该技术在弱光环境成像、显微观测等领域具有重要应用价值,其低成本特性也大大降低了特殊波段成像的门槛。

weixin_29061425的博客 345

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

  本文将介绍J2SE 5.0中三个比较重要的特性: 枚举类型, 注释类型, 范型, 并在此基础上介绍在如何在Eclipse 3.1开发环境中开发枚举类型, 注释类型和范型应用。   J2SE 5.0 (Tiger)的发布是Java语言发展史上的一个重要的里程碑, 是迄今为止在 Java 编程方面所取得的最大进步.  J2SE 5.0提供了很多令人激动的特性.这些特性包括范型(generics)的

键者天行 9811

SPSS27 paired t-test 中的Cohen’s D – Effect Size for T-Test

两组数据是相关的且是连续的。

moonlightpeng的博客 910

Java枚举类型详解(原理+用法)

可以这么说,Java的枚举类型本来是不存在的,但Java发了个"语法糖",就有了枚举类型。Java从JDK1.5开始支持枚举,通常一个特性如果在一开始没有提供,在语言发展后期才添加,会遇到一个问题,就是向后兼容性的问题。像Java在1.5中引入的很多特性,为了向后兼容,编译器会帮我们写的源代码做很多事情,比如泛型为什么会擦除类型,为什么会生成桥接方法,foreach迭代,自动装箱/拆箱等,这个术语

路漫漫 始于足下 1453

微波传感器 - 从原理到实战,解锁非接触感知新维度

本文深入解析微波传感器的工作原理,重点阐述了其基于多普勒效应的非接触感知机制,并对比了红外、超声波等技术的优劣。通过树莓派Pico与RCWL-0516模块的实战案例,展示了如何构建区域入侵检测器,并探讨了微波传感器在智能家居、工业自动化及汽车电子等领域的广阔应用前景。

weixin_29306571的博客 225

【肝帝一周总结:全网最全最细】十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看!

文章目录前言一定要看python入门python缩进Python注释Python 变量1. 定义理解2. 变量名命名3. 分配多个值4. 输出变量5. 全局变量 前言一定要看 python能干什么?有什么用?好处在哪?不要我讲了,这不是我在博客该讲的,言简意赅就是:通俗易懂,上手快,实用强。我会根据自己个人理解以及国外官网翻译为中文对大家进行讲解。完整源码我也会在最下面带上地址。内容过多,我不会全部演示,你完全可以复制粘贴到自己的pycharm上运行即可。 不管是国内的菜鸟教程还是我在这里的翻译,至少你跟

全栈川川 5万+

JAVA 枚举类型详解

JAVA 枚举类型详解前言一、枚举是什么?二、自定义枚举三、JAVA枚举类型总结 前言 JDK1.5之前,只能使用自定义实现枚举,JDK1.5后,引入了枚举类型,本文将从自定义枚举类型的创建开始,详解JAVA的枚举类型。 一、枚举是什么? 可以理解为,一个JAVA类持有本类的N个静态类型属性,且这些属性都是final的,指向的对象不可改变,在初始化时就已确定。在使用时,直接通过类名获取,每个属性均为单例。 二、自定义枚举 代码如下(示例): package com.example.enumTest;

weixin_38730113的博客 1144

基于LLaMA-action模型的文档摘要任务微调

文档摘要是指从长文档中提取关键信息,生成简短而准确的总结。抽取式摘要:从原文中直接抽取关键句子或短语组成摘要。生成式摘要:通过生成新的句子来表达原文的核心内容。混合式摘要:结合抽取式和生成式方法,既保留原文的关键句子,又生成新的内容。新闻网站:自动生成新闻摘要,帮助用户快速了解新闻要点。社交媒体:为用户提供新闻摘要,便于分享和传播。学术搜索引擎:为用户提供学术文献的摘要,帮助用户快速筛选相关文献。学术写作辅助:帮助研究人员快速生成文献综述部分。企业内部文档管理:自动生成文档摘要,便于员工快速了解文档内容。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1431
上一篇: 探索JDK1.5高级编码特征-Java基础-Java-编程开发
下一篇: Java数据对象(JDO)的前世今生-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值