Java SE 059 类型安全的枚举

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

Java SE 059 类型安全的枚举

1.枚举类型

1.1枚举类型关键字enum

(1)JDK1.5加入了一个全新的类型“类”——枚举类型。为此JDK1.5引入了一个新关键字enum.

1.2枚举类型定义

public enum Color{
	Red,
	White,
	Blue
}

1.3枚举类型的使用

package com.javase.enums;

public class ColorTest {
	public static void main(String[] args) {
		Color color = Color.Red;
		System.out.println(color);
	}
}

1.4枚举类型的常用方法

(1)枚举类型还提供了两个非常有用的静态方法,values()和valueOf()。我们可以很方便地使用它们:例如

package com.javareview.javaenum.test;

import com.javareview.javaenum.Color;

/**
 * 枚举的使用
 */
public class ColorTest {
	public static void main(String[] args) {
		Color color = Color.Red;
		System.out.println(color);
		for(Color c : Color.values()){
			System.out.println(c);
		}
	}
}

(2)遍历时,是按照定义枚举变量的顺序进行输出的。

2.枚举的应用

2.1声明枚举类型

enum OpConstant{
	TURN_LEFT,TURN_RIGHT,SHOOT;
}

2.1使用枚举类型

package com.javase.enums;

public class EnumTest {
	public static void doOp(OpConstant opContant){
		//switch 语句后面可以跟五种数据类型 char byte short int 枚举
		switch(opContant){
		case TURN_LEFT:
			System.out.println("向左转");
			break;
		case TURN_RIGHT:
			System.out.println("向右转");
			break;
		case SHOOT:
			System.out.println("射击");
			break;
		}
	}
	
	public static void main(String[] args) {
		doOp(OpConstant.TURN_RIGHT);
	}
}

3.定义枚举类型

3.1枚举通过构造方法传值的写法

(1)我们在定义枚举的时候,本质上就是定义一个类别,只不过很多细节由编译器帮您完成了,所以某些程度上,enum关键字的作用就像class或interface.

package com.javareview.javaenum;
/**
 * 定义枚举类(枚举通过构造方法传值的使用)
 */
public enum Coin {
	//s1.声明枚举成员的时候调用枚举构造方法
	penny("hello"),nickel("world"),dime("welcome"),quarter("hello world");
	
	//s2.枚举也可以有成员属性与构造方法
	private String value;

	public String getValue() {
		return value;
	}
	
	private Coin() {
	}

	//s3.定义枚举构造方法
	private Coin(String value) {
		this.value = value;
	}
	
}

3.2枚举类型的使用

package com.javareview.javaenum.test;

import com.javareview.javaenum.Coin;

/**
 * 枚举类型的使用
 */
public class CoinTest {
	public static void main(String[] args) {
		//测试枚举通过构造方法传值的使用
		Coin coin = Coin.quarter;
		System.out.println(coin.getValue());
	}
}

4.小结

(1)当您使用“enum”定义一个枚举类型时,实质上您定义出来的类型继承自java.lang.Enum类型,而每个枚举的成员(如nickel(“world”))其实就是您定义的枚举类型的一个实例(Instance),他们都被预设为final,所以您无法改变他们,他们也是static成员,所以您可以通过类型名称直接使用他们,当然最重要的,它们都是公开的(public)。
(2)我们定义的每个枚举类型都继承自java.lang.Enum类,枚举中的每个成员默认都是public static final的。
(3)枚举成员

public enum Color {
	Red,White,Blue
}

(a)以上代码中枚举类型Color,有三个成员,表示有三个对象,并且只会有三个对象,(我们通常在使用一个类的时候,可以随便的new出多个对象,但如果使用枚举,在枚举里面写几个枚举值,就表示枚举有几个对象或称作实例。)枚举的对象在编译的时候就已经确定好了。
(b)每个枚举的成员(如nickel(“world”))其实就是您定义的枚举类型的一个实例(Instance),换句话说当定义了一个枚举类型之后,在编译时刻就能确定枚举类型有几个实例,分别是什么。在运行期间我们无法再使用该枚举类型创建新的实例了,这些实例在编译期间就完全确定下来了。
(c)什么类型的枚举就生成什么样的对象

Coin coin = Coin.quarter;

这是枚举与类的最大差别,通常一个类的对象是不确定的,new几次生成几个

5.枚举类型的比较

5.1枚举类型定义

/**
 * 定义枚举
 */
public enum OpConstant {
	TURN_LEFT,TURN_RIGHT,SHOOT;
}

5.2枚举比较方法

/**
 * 枚举类型的比较
 */
public class ShowEnum {
	@SuppressWarnings("static-access")
	public static void enumCompareTo(OpConstant constant){
		System.out.println(constant);
		for(OpConstant c : constant.values()){
			System.out.println(constant.compareTo(c));
		}
	}
}

5.3枚举比较测试

public class ShowEnumTest {
	public static void main(String[] args) {
		//valueOf()方法可以将一个字符串转换成为枚举值
		ShowEnum.enumCompareTo(OpConstant.valueOf("TURN_LEFT"));
	}
}

6.枚举的集合 EnumSet

6.1EnumSet的作用

(1)EnumSet的名称说明了其作用,它是在J2EE5.0后加入的新类别,可以协助您建立枚举值的集合,它提供了一系列的静态方法,可以让您指定不同的集合建立方式。

6.2枚举类型定义

/**
 * 枚举定义
 */
public enum FontConstant {
	Plain,Bold,Italilc,Hello
}

6.3输出枚举集合

/**
 * 枚举集合输出
 */
public class EnumSetShow {
	/**
	 * 显示枚举集合
	 * @param enumSet
	 */
	public static void showEnumSet(EnumSet<FontConstant> enumSet) {
		for(Iterator<FontConstant> iter = enumSet.iterator();iter.hasNext();) {
			System.out.println(iter.next());
		}
	}
}

6.4枚举方法的测试

/**
 * 枚举集合测试
 */
public class EnumSetShowTest {
	public static void main(String[] args) {
		//s1.初始化枚举集合
		EnumSet<FontConstant> enumSet = EnumSet.of(FontConstant.Plain,FontConstant.Bold);
		//s2.输出枚举值
		EnumSetShow.showEnumSet(enumSet);
		System.out.println("=======================");
		//s3.complementOf方法这里面最后生成的集合,每一个元素是FontConstant类型的除了FontConstant.Plain,FontConstant.Bold这两个类型之外的类型实例
		EnumSetShow.showEnumSet(EnumSet.complementOf(enumSet));
	}
}

(1)注意:EnumSet.complementOf()方法的意思是列出除指定枚举集合中初始元素之外还有哪些元素。

6.5EnumSet.noneOf()方法

public class EnumNoneOfTest {
	public static void main(String[] args) {
		//s1.初始化枚举集合
		//开始枚举值是空的,即创建一个没有内容的枚举集合,但是指定好要接收什么类型的枚举,这是另外一种构造枚举类型的方式
		EnumSet<FontConstant> enumSet = EnumSet.noneOf(FontConstant.class);
		//s2.为枚举集合赋值
		enumSet.add(FontConstant.Bold);
		enumSet.add(FontConstant.Italilc);
		//s3.显示输出枚举集合元素值
		EnumSetShow.showEnumSet(enumSet);
	}
}
的枚举,这是另外一种构造枚举类型的方式
		EnumSet<FontConstant> enumSet = EnumSet.noneOf(FontConstant.class);
		//s2.为枚举集合赋值
		enumSet.add(FontConstant.Bold);
		enumSet.add(FontConstant.Italilc);
		//s3.显示输出枚举集合元素值
		EnumSetShow.showEnumSet(enumSet);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值