原文网址: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

【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错的更多相关文章

  1. Java基础之枚举类型Enum的使用

    Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...

  2. Java基础_枚举类型

    作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...

  3. java基础(十一) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  4. Java学习笔记-枚举类型

    枚举类型 枚举类型就是预先定义的一类常量集合,如一周的时间.水果的类型等.需要注意的几点内容如下: 定义枚举类时,Java默认继承java.lang.Enum,所以定义的枚举类不能继承其他类型: 枚举 ...

  5. Java基础之枚举类型

    枚举 为什么需要枚举 在Java开发过程中,有时需要定义一系列有限的数据,如:月份.星期等.<br> java1.5之前,主要通过定义一系列静态常量完成. class Genders{ p ...

  6. Rhythmk 一步一步学 JAVA(9) JAVA 基础笔记[枚举,...]

    1.装箱就是值类型转换为object类型,拆箱相反:object转化为值类型 eg:Integer i=1; // 装箱 int j=i; // 拆箱 2.静态导入: eg: 导入: import s ...

  7. Java基础教程——枚举类型

    枚举类型 枚举类型在JDK 5时引入. enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } ...

  8. Java基础笔记(七)—— 成员变量、静态变量、局部变量

    public class Test { int c; //成员变量(实例变量) static int s1; //静态变量(类变量)(全局变量) public static void main(Str ...

  9. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

随机推荐

  1. MySQL Replication, 主从和双主配置

    MySQL Replication, 主从和双主配置 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场 ...

  2. win7方面API學習

    Getting Applicateion Data Folder Paths Win32 #include <shlobj.h> //link with shell32.lib PWSTR ...

  3. 编程算法 - 连续子数组的最大和 代码(C)

    连续子数组的最大和 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个整型数组, 数组里有正数也有负数. 数组中一个或连续的多个整数组成一 ...

  4. PHP 函数的“引用返回”概念释疑(转)

    很多时候我们会看到这样的代码(出自 CI 框架源码): 1 $class =& load_class('a','b'); 我们都知道其中的'&'是指引用,但是它的作用是什么呢?它能够解 ...

  5. PHP安全编程:网站安全设计的一些原则(转)

    深度防范 深度防范原则是安全专业人员人人皆知的原则,它说明了冗余安全措施的价值,这是被历史所证明的. 深度防范原则可以延伸到其它领域,不仅仅是局限于编程领域.使用过备份伞的跳伞队员可以证明有冗余安全措 ...

  6. MyBatis报错

    1.错误描写叙述 2014-11-2 15:03:11 org.apache.catalina.core.StandardEngine start 信息: Starting Servlet Engin ...

  7. Gradle Import Wizard--官方文档

    Last updated and checked to work with version 3.0.0 of the tools This tutorial will take you through ...

  8. 几种任务调度的 Java 实现方法与比较--转载

    前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz ...

  9. 完美解决Android完全退出程序(转)

    背景:假说有两个Activity, Activity1和Activity2, 1跳转到2,如果要在2退出程序,一般网上比较常见的说法是用 System.exit(0) 或是 android.os.Pr ...

  10. POJ 3162 Walking Race(树的直径+单调队列)

    题目大意:对一棵树,求出从每个结点出发能到走的最长距离(每个结点最多只能经过一次),将这些距离按排成一个数组得到dis[1],dis[2],dis[3]……dis[n] ,在数列的dis中求一个最长的 ...