【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错_weixin_30439067的博客-程序员秘密

技术标签: java  数据结构与算法  

原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-import.html#1.2、values方法的使用:

Java基础笔记 – 枚举类型的使用介绍和静态导入
本文由 arthinking发表于4年前 |  Java基础 | 暂无评论 |  被围观 8,332 views+
1、枚举(Enum): 1.1、枚举类型中的两个静态方法: 1.2、values方法的使用: 1.2、values方法的使用: 1.3、创建包含私有成员变量的枚举常量: 1.4、枚举类型详细说明: 1.5、枚举的比较: 1.6、枚举的相关方法: 2、EnumSet: 2.1、of方法 2.2、noneOf方法 3、List保存枚举类型: 4、EnumMap类: 5、枚举在实际开发中的使用: 6、静态导入:
1、枚举(Enum):

JDK5.0中加入了枚举类型,使用enum关键字定义,可以按照如下定义:

public enum Weather{
    Sunny,
    Rainy,
    Cloudy,
}
1.1、枚举类型中的两个静态方法:
values()
        获取枚举类型的所有枚举常量
valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
1.2、values方法的使用:
for(Weather weather : Weather.values()){
    System.out.println(weather);
}
System.out.println(Weather.valueOf(Weather.class, "Sunny"));
1.2、values方法的使用:
for(Weather weather : Weather.values()){
    System.out.println(weather);
}
//以下输出为Sunny
System.out.println(Weather.valueOf(Weather.class, "Sunny"));
1.3、创建包含私有成员变量的枚举常量:
public enum Weather{
    Sunny("晴天"),
    Rainy("雨天"),
    Cloudy("多云");
    //私有成员变量,保存名称
    private String value; public String getValue() { return value; } //带参构造函数 Weather(String value){ this.value = value; } } public static void main(String[] args) { Weather weather1 = Weather.Sunny; //以下输出为"晴天" System.out.println(weather1.getValue()); }
1.4、枚举类型详细说明:

enum关键字的作用类似于class或interface,本质上是在定义一个类别,细节的实现由编译器完成。

自定义的枚举类型实质上继承自java.lang.Enum抽象类。而每一个成员常量其实就是自己定义的枚举类型的一个实例,都被定义为final,所有无法改变他们,另外他们是static,pulibc的,即:

public static final 枚举常量;

在运行期间我们无法再使用该枚举类型创建新的实例,这些实例是在编译期间就完全确定下来了的。

1.5、枚举的比较:
compareTo
public final int compareTo(E o)
比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时,分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。
指定者:
接口 Comparable<E extends Enum<E>> 中的 compareTo
参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
Weather[] arrays = Weather.values();
for(Weather weather2 : arrays){
    System.out.println((Weather.Sunny).compareTo(weather2));
}
1.6、枚举的相关方法:
ordinal
public final int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。
返回:
枚举常量的序数
for(Weather weather2 : arrays){
    System.out.println(weather2.ordinal() + ":" + weather2);
}
2、EnumSet:
public abstract class EnumSet<E extends Enum<E>>
extends AbstractSet<E>
implements Cloneable, Serializable

与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。

此类可以帮助我们建立枚举值的集合,里面提供了一系列的静态方法,可以指定不同的集合建立方式。

2.1、of方法
public static <E extends Enum<E>> EnumSet<E> of(E first,
                                                E... rest)
创建一个最初包含指定元素的枚举 set。此工厂方法的参数列表使用变量参数功能,该方法可以创建一个最初包含任意个元素的枚举 set,但是这样很可能比不使用变量参数的重载运行得慢。
参数:
first - 此 set 最初要包含的元素
rest - 此 set 最初要包含的其余元素
返回:
最初包含指定元素的枚举 set
抛出:
NullPointerException - 如果任意参数为 null,或 rest 为 null
EnumSet<Weather> enumSet = EnumSet.of(Weather.Sunny, Weather.Rainy);

for(Iterator<Weather> iter = enumSet.iterator(); iter.hasNext();){
    System.out.println(iter.next());
}
2.2、noneOf方法
public static <E extends Enum<E>> EnumSet<E> noneOf(Class<E> elementType)
创建一个具有指定元素类型的空枚举 set。
参数:
elementType - 此枚举 set 的元素类型的 class 对象
抛出:
NullPointerException - 如果 elementType 为 null
EnumSet<Weather> enumSet2 = EnumSet.noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);

for(Iterator<Weather> iter = enumSet2.iterator(); iter.hasNext();){
    System.out.println(iter.next());
}
3、List保存枚举类型:
List<Weather> list = new ArrayList<Weather>();
list.add(Weather.Sunny);
list.add(Weather.Cloudy);

for(Iterator<Weather> iter = list.iterator(); iter.hasNext();){
    System.out.println(iter.next());
}
4、EnumMap类:
public class EnumMap<K extends Enum<K>,V>
        extends AbstractMap<K,V>
        implements Serializable, Cloneable

与枚举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须来自单个枚举类型,该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。

枚举映射根据其键的自然顺序 来维护(该顺序是声明枚举常量的顺序)。在 collection 视图(keySet()、entrySet() 和 values())所返回的迭代器中反映了这一点。

EnumMap
public EnumMap(Class<K> keyType)
创建一个具有指定键类型的空枚举映射。
参数:
keyType - 此枚举映射的键类型的 class 对象
抛出:
NullPointerException - 如果 keyType 为空
Map<Weather, String> enumMap = new EnumMap<Weather, String>(Weather.class);
enumMap.put(Weather.Sunny, "晴天");
enumMap.put(Weather.Rainy, "雨天");
5、枚举在实际开发中的使用:
public static String getString(Weather weather){
    if(weather == Weather.Sunny){
        return Weather.Sunny.getValue();
    } else if(weather == Weather.Rainy){ return Weather.Rainy.getValue(); } else if(weather == Weather.Cloudy){ return Weather.Cloudy.getValue(); } return "不符合的天气情况"; }

调用上面的方法:

Weather weather3 = Weather.Sunny;
System.out.println(getString(weather3));
6、静态导入:

如果要使用静态变量或者方法,必须给出该方法所在的类。而使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,这样就无需给出他们的类名了:

如加入以下导入语句:

import static java.util.EnumSet.noneOf;

就可以直接使用这个静态方法了:

EnumSet<Weather> enumSet2 = noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接: http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-import.html
关键字:  EnumJava枚举静态导入
arthinking指弹吉他 && 技术more

 

转载于:https://www.cnblogs.com/wi100sh/p/4473525.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30439067/article/details/98218223

智能推荐

(转)Silverlight 3/4新特性_diaoliti2465的博客-程序员秘密

转载自《http://www.cnblogs.com/nasa/archive/2009/07/12/new-future-of-sl3.html》一、Silverlight 3 新特性Silverlight官方网站列出了Silverlight 3的新特性:支持高质量视频和音频 直播和点播的真高清(True HD 720P+)平滑流媒体支持更多格式全屏真高清回放扩展的...

这份字节跳动历年校招Android面试真题解析,搞懂这些直接来阿里入职_m0_56067448的博客-程序员秘密

开头先说一下我大概的情况吧。渣本毕业,工作已经有快两年了,从高中就开始玩小破站。无论是学习还是日常放松都是在b站。大学主学的软件技术专业,所以,进大学校门那一刻起,去上海bilibili工作就在心里埋下了种子。在学校,专业学的挺好的,自己写过一些小项目,也参与过一些协会开发的项目。两年前刚毕业时候,b站也有校招,我当然满怀期待的参加了,但是并没有被录用。当时,挺失落的吧,当时也有想过放弃:我一个渣渣二本毕业,凭什么去上海,进b站啊。所以就找了个普普通通的公司开始了我的程序员生涯。到今年年初的时候,疫.

自定义View中Canvas之Path的详解_LayneYao的博客-程序员秘密

上一篇Canvas的绘制图形只能绘制一些常规的,比如点、线、圆、椭圆、矩形等的。如果想要绘制更复杂的图形,那么就得靠Path了。Path的定义: Path类将多种符合路径(多个轮廓,如直线段、二次曲线、立方曲线等)封装在其内部的几何路径。Path的绘制: 通过设置Paint.Style的FILL(只描内容)、STROKE(只描边)、FILL_AND_STROKE(描边和内容),然后调用...

[转]QVector与QByteArray——Qt的写时复制(copy on write)技术_weixin_33739523的博客-程序员秘密

我们在之前的博文QVector的内存分配策略与再谈QVector与std::vector——使用装饰者让std::vector支持连续赋值中简单聊了聊QVector内存分配和赋值方面的一点东西,今天接着从QVector展开谈谈Qt的写时复制技术。老实说,“隐式共享,引用计数,写时复制”也是老调重弹的话题了,不过也是QTL与STL最大的区别之一,这篇博文不详谈“写时复制”技术的细节,那个有不少文章...

控制台界面控制(一)_综合控制台界面_bnb45的博客-程序员秘密

总述:本篇(可能是一系列)文章是控制台学习相关的学习笔记,教程为以下两个链接(之一)。前言:这里所说的控制台指的是Console编程。显示的界面类似DOS,某种程序上也很像TC里的运行结果。是一种VC上的简易窗口编程。VC++有提供Window窗口编程,可以写出很好看的窗口界面,可是涉及的知识点较多。如果有时候只是想测试一下某个用法,或者写的某个函数,就很没效率。控制台基本上不需要

5、人生中的第一个Java程序:HelloWorld_韩茹_的博客-程序员秘密

人生中的第一个Java程序:HelloWorld作者:韩茹公司:程序咖(北京)科技有限公司程序咖:IT职业技能评测平台网址:https://www.chengxuka.com任务1.编写HelloWorld程序2.尽可能的理解程序3.编译源文件4.运行程序1.编写HelloWorld程序2.尽可能的理解程序3.编译源文件4.运行程序我们已经做好了足够的准备,现在可以编写我们人生中的第一个Java程序了。有米有一种跃跃欲试的赶脚。。。...

随便推点

windows下安装PHP的扩展xhprof_保罗森的博客-程序员秘密

1.下载扩展:windows:http://windows.php.net/downloads/pecl/releases/xhprof/0.10.6/Linux:https://github.com/phacility/xhprof 或http://pecl.php.net/package/xhprof【下载最新版 网上分享的旧版有BUG (后面说)】注意:

AD打印装配图的细节_ad打件图_LostSpeed的博客-程序员秘密

前言生产的同事初步焊接好了打样后的PCB,用工业显微镜检测发现了10处问题。和他讨论时,他要求将背面的装配图打印出来(开始他用的装配图是其他同事打印的,只打印了正面)。我试着用佳能mf4800网络打印机打印时,发现零件丝印根本看不清,但是版本信息的大字体和元件轮廓都很清晰。有啥整错了?问同事,他用PS将装配图处理后(字体放大,加粗)打印的。这么专业的事情,不会弄啊。。。后来实验发现,我开始出的装配图是彩色的。打印机墨盒是黑白的,打印时,可能是自动带灰度打印的。颜色浅的丝印(特别是小字体丝印 2mi

selenium + chromewebdriver 的安装说明_qq_40157234的博客-程序员秘密

selenium 与 chromewebdriver的安装    1、selenuim 是一款自动化测试工具 配置一些wendriver可以完成一些web的自动化测试工作        2、selenium 在python下 windows os下可以使用 pip install selenium 命令进行安装        3、现在开始chromewebdriver的安装,这里的关键点也是很容易...

uniapp中使用base64加密解密_uniapp base64_Mr_Bobcp的博客-程序员秘密

在项目文件夹下使用npm包管理工具安装base64,此处要做兼容所以未使用‘js-base64’,参考base-64和js-base64npm install base-64在页面的 ‘script’ 标签中引入import Base64 from 'base-64';在逻辑代码中使用var code = '123456';var en = Base64.encode(code); //编码:MTIzNDU2var de = Base64.decode(en); //译码:123456

工作中常用的软件测试术语_测试工作中常用语_Vikkie的博客-程序员秘密

User Acceptance testing(验收测试),系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。Ad hoc testing (随机测试),没有书面测试用例、记录期望结果、检查列表、脚本或指令的测试。主要是根据测

智慧数字经营的重要性及注意事项_Restart959的博客-程序员秘密

智慧数字化经营提出打造多场景与智能经营的核心本质,即通过打造随时随地、实体与虚拟结合的数字化全渠道,以及覆盖消费服务的智能管理服务体系,不断以创新推动智慧经营模式的持续发展,构建具有数字化特色的智慧经营模式。智慧数字化经营是围绕产品、渠道、用户、技术、运营等门店核心能力的延伸。智慧经营要进入行业中主流的、规模大的市场,以服务于更多的用户需求。智慧门店和商城平台是智慧经营时代的基础,在数字化时代,传统渠道已无法满足消费者的需求,需要构建起数字化的消费、营销、经营,搭建起能够连接各类消费人群、各种消费场景

推荐文章

热门文章

相关标签