【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-import.html#1.2、values方法的使用:
JDK5.0中加入了枚举类型,使用enum关键字定义,可以按照如下定义:
public enum Weather{
Sunny,
Rainy,
Cloudy,
}
values()
获取枚举类型的所有枚举常量
valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
for(Weather weather : Weather.values()){
System.out.println(weather);
}
System.out.println(Weather.valueOf(Weather.class, "Sunny"));
for(Weather weather : Weather.values()){
System.out.println(weather);
}
//以下输出为Sunny
System.out.println(Weather.valueOf(Weather.class, "Sunny"));
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());
}
enum关键字的作用类似于class或interface,本质上是在定义一个类别,细节的实现由编译器完成。
自定义的枚举类型实质上继承自java.lang.Enum抽象类。而每一个成员常量其实就是自己定义的枚举类型的一个实例,都被定义为final,所有无法改变他们,另外他们是static,pulibc的,即:
public static final 枚举常量;
在运行期间我们无法再使用该枚举类型创建新的实例,这些实例是在编译期间就完全确定下来了的。
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));
}
ordinal
public final int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 大多数程序员不会使用此方法。它被设计用于复杂的基于枚举的数据结构,比如 EnumSet 和 EnumMap。
返回:
枚举常量的序数
for(Weather weather2 : arrays){
System.out.println(weather2.ordinal() + ":" + weather2);
}
public abstract class EnumSet<E extends Enum<E>>
extends AbstractSet<E>
implements Cloneable, Serializable
与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型,该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好,足以用作传统上基于 int 的“位标志”的替换形式,具有高品质、类型安全的优势。如果其参数也是一个枚举 set,则批量操作(如 containsAll 和 retainAll)也应运行得非常快。
此类可以帮助我们建立枚举值的集合,里面提供了一系列的静态方法,可以指定不同的集合建立方式。
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());
}
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());
}
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());
}
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, "雨天");
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));
如果要使用静态变量或者方法,必须给出该方法所在的类。而使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见,这样就无需给出他们的类名了:
如加入以下导入语句:
import static java.util.EnumSet.noneOf;
就可以直接使用这个静态方法了:
EnumSet<Weather> enumSet2 = noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);
本文链接:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-import.html
【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错的更多相关文章
- Java基础之枚举类型Enum的使用
Java基础之枚举类型Enum的使用 定义 public enum AccruedCleanEnum { SPREAD("1","发票"),OTHER(&quo ...
- Java基础_枚举类型
作用:让数据更简洁,更易读,增加代码可读性. 为了用1,2,3,4,5分别表示老师,学生,小组,班主任,后勤,可以直接设置一个变量,让roleType = 1,但这样写代码可读性差. 也可以定义一个成 ...
- java基础(十一) 枚举类型
枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...
- Java学习笔记-枚举类型
枚举类型 枚举类型就是预先定义的一类常量集合,如一周的时间.水果的类型等.需要注意的几点内容如下: 定义枚举类时,Java默认继承java.lang.Enum,所以定义的枚举类不能继承其他类型: 枚举 ...
- Java基础之枚举类型
枚举 为什么需要枚举 在Java开发过程中,有时需要定义一系列有限的数据,如:月份.星期等.<br> java1.5之前,主要通过定义一系列静态常量完成. class Genders{ p ...
- Rhythmk 一步一步学 JAVA(9) JAVA 基础笔记[枚举,...]
1.装箱就是值类型转换为object类型,拆箱相反:object转化为值类型 eg:Integer i=1; // 装箱 int j=i; // 拆箱 2.静态导入: eg: 导入: import s ...
- Java基础教程——枚举类型
枚举类型 枚举类型在JDK 5时引入. enum WeekEnum { MONDAY, TUESDAY, WEDNESDAY, THURDAY, FRIDAY, SATURDAY, SUNDAY } ...
- Java基础笔记(七)—— 成员变量、静态变量、局部变量
public class Test { int c; //成员变量(实例变量) static int s1; //静态变量(类变量)(全局变量) public static void main(Str ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
随机推荐
- IntPtr与自定义结构互转
//IntPtr转自定义结构 struct onlydata { IntPtr hwnd; }; onlydata pd=new onlydata(); IntPtr pd; pd=Marshal.P ...
- configure JAAS for jboss 7.1 and mysql--reference
Hello all, In this tutorial we are going to configure JAAS for jboss 7.1 and mysql for Form based au ...
- Creating a simple static file server with Rewrite--reference
Today, I’d like to take a quick moment to demonstrate how to make a simple file server using Rewrite ...
- SASS详解之沿袭(extend)
SASS详解之继承(extend) 每一个类名都有可能有另一个类名的所有样式和它自己的特定样式的.当一个div的身上有两个类名,一个是“one”,另一个是“two”的时候.如下 HTML代码 < ...
- leetcode修炼之路——387. First Unique Character in a String
最近公司搬家了,有两天没写了,今天闲下来了,继续开始算法之路. leetcode的题目如下: Given a string, find the first non-repeating characte ...
- 启动php-fpm报错:please specify user and group other than root
安装好PHP之后启动报错: 启动php-fpm报错:please specify user and group other than root, pool 'default 修改 php-fpm.co ...
- Swift - 30 - 可变参数
//: Playground - noun: a place where people can play import UIKit // 可变参数一定要放在所有定义参数的最后面, 和其他参数的定义方式 ...
- 3.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
public static void main(String[] args) { Scanner scanner=new Scanner(System.in); ...
- 50 Pow(x, n)(求x的n次方Medium)
题目意思:x为double,n为int,求x的n次方 思路分析:直接求,注意临界条件 class Solution { public: double myPow(double x, int n) { ...
- 《asp.net mvc3 高级编程》第二章 控制器
一.控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时通常会修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流,输入数据的处理 ...