东莞搜索排名提升,关键词优化技巧,wordpress购买服务器,装潢设计专业学校Java基础笔记 – 枚举类型的使用介绍和静态导入 本文由 arthinking 发表于404 天前 ⁄ Java基础 ⁄ 暂无评论 ⁄ 被围观 1,433 views 1、枚举#xff08;Enum#xff09;#xff1a;JDK5.0中加入了枚举类型#xff0c;使用enum关键字定义#xff0c;可以按照如下定义 1、枚举Enum JDK5.0中加入了枚举类型使用enum关键字定义可以按照如下定义 public enum Weather{
Sunny,
Rainy,
Cloudy,
} 1.1、枚举类型中的两个静态方法 values()
获取枚举类型的所有枚举常量 valueOf(ClassT 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所有无法改变他们另外他们是staticpulibc的即 public static final 枚举常量; 在运行期间我们无法再使用该枚举类型创建新的实例这些实例是在编译期间就完全确定下来了的。 1.5、枚举的比较 compareTo
public final int compareTo(E o)
比较此枚举与指定对象的顺序。在该对象小于、等于或大于指定对象时分别返回负整数、零或正整数。 枚举常量只能与相同枚举类型的其他枚举常量进行比较。该方法实现的自然顺序就是声明常量的顺序。
指定者
接口 ComparableE extends EnumE 中的 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 EnumSetE extends EnumE
extends AbstractSetE
implements Cloneable, Serializable 与枚举类型一起使用的专用 Set 实现。枚举 set 中所有键都必须来自单个枚举类型该枚举类型在创建 set 时显式或隐式地指定。枚举 set 在内部表示为位向量。此表示形式非常紧凑且高效。此类的空间和时间性能应该很好足以用作传统上基于 int 的“位标志”的替换形式具有高品质、类型安全的优势。如果其参数也是一个枚举 set则批量操作如 containsAll 和 retainAll也应运行得非常快。 此类可以帮助我们建立枚举值的集合里面提供了一系列的静态方法可以指定不同的集合建立方式。 2.1、of方法 public static E extends EnumE EnumSetE of(E first,
E... rest)
创建一个最初包含指定元素的枚举 set。此工厂方法的参数列表使用变量参数功能该方法可以创建一个最初包含任意个元素的枚举 set但是这样很可能比不使用变量参数的重载运行得慢。
参数
first - 此 set 最初要包含的元素
rest - 此 set 最初要包含的其余元素
返回
最初包含指定元素的枚举 set
抛出
NullPointerException - 如果任意参数为 null或 rest 为 null EnumSetWeather enumSet EnumSet.of(Weather.Sunny, Weather.Rainy);
for(IteratorWeather iter enumSet.iterator(); iter.hasNext();){
System.out.println(iter.next());
} 2.2、noneOf方法 public static E extends EnumE EnumSetE noneOf(ClassE elementType)
创建一个具有指定元素类型的空枚举 set。
参数
elementType - 此枚举 set 的元素类型的 class 对象
抛出
NullPointerException - 如果 elementType 为 null EnumSetWeather enumSet2 EnumSet.noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);
for(IteratorWeather iter enumSet2.iterator(); iter.hasNext();){
System.out.println(iter.next());
} 3、List保存枚举类型 ListWeather list new ArrayListWeather();
list.add(Weather.Sunny);
list.add(Weather.Cloudy);
for(IteratorWeather iter list.iterator(); iter.hasNext();){
System.out.println(iter.next());
} 4、EnumMap类 public class EnumMapK extends EnumK,V
extends AbstractMapK,V
implements Serializable, Cloneable 与枚举类型键一起使用的专用 Map 实现。枚举映射中所有键都必须来自单个枚举类型该枚举类型在创建映射时显式或隐式地指定。枚举映射在内部表示为数组。此表示形式非常紧凑且高效。 枚举映射根据其键的自然顺序 来维护该顺序是声明枚举常量的顺序。在 collection 视图keySet()、entrySet() 和 values()所返回的迭代器中反映了这一点。 EnumMap
public EnumMap(ClassK keyType)
创建一个具有指定键类型的空枚举映射。
参数
keyType - 此枚举映射的键类型的 class 对象
抛出
NullPointerException - 如果 keyType 为空 MapWeather, String enumMap new EnumMapWeather, 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; 就可以直接使用这个静态方法了 EnumSetWeather enumSet2 noneOf(Weather.class);
enumSet2.add(Weather.Sunny);
enumSet2.add(Weather.Rainy);