(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);
}
}