JAVA enum 枚举类型(2017-07-18)
2017-07-18 09:37
323 查看
最近把JAVA书拿过来又看了一遍。看到这个枚举类型。
不过因为工作中,很少用到这个枚举类型,即使需要定义常量,大多数也是用public static fianl。。。
最近看到,我去网上查阅了一番资料,看了一些博主写的文章,结合这些资料,和我自己测试结果,来粗浅的记录下自己的心得。
说道枚举,就不得不说关键词:enum
;
下面来说一下enum
的几个需要我们了解的点:
1、enum
定义的类型是一个类,这些类都集成Enum类,即继承:java.lang.Enum类。既然继承了Enum,那么显而易见,就继承了Enum的很多方法。
2、enum
定义是一个final类,是不可再次被继承。enum 定义的类里的常量都是final的静态常量。
3、enum
定义的类中有构造器、方法、和数据域。但是枚举的构造器与一般普通类有些区别:
①构造器只在构造枚举值时被调用。
②构造器中只能私有private,决不能有public构造器。
JAVA枚举分为三个案例来讲:
案例一:普通JAVA类中定义package test.ENum类;
案例代码:
package test.ENum;
public class ColorEnumTest {
public enum ColorTest{
RED,GREEN,BLANK
}
public static void main(String[] args) {
//1.输入枚举名
System.out.println("1. " + ColorTest.RED);
//2.枚举与switch的结合使用,遍历ColorTest选中的数据
ColorTest test = ColorTest.RED;
switch (test) {
case RED:
System.out.println("2.是RED");
break;
case GREEN:
System.out.println("2.是GREEN");
break;
case BLANK:
System.out.println("2.是BLANK");
break;
default:
break;
}
//3.枚举与for循环的结合使用,通过values获取所有值
for(ColorTest ct : ColorTest.values()){
System.out.println("3.本次打印的颜色是:" + ct);
}
//4.枚举常用方法
/*4.1.获取ColorTest值个数 通过values()方法将ColorTest转换成一个数组,获取其个数*/
System.out.println("4.1. ColorTest值有" + ColorTest.values().length + "个");
/*4.2.ordinal()获取索引位置 起始值为:0*/
System.out.println("4.2. RED所在位置是:" + ColorTest.RED.ordinal());
/*4.3.枚举默认实现了java.lang.Comparable接口,-1之前,0位置相同,1之后*/
System.out.println("4.3. " + ColorTest.RED.compareTo(ColorTest.GREEN));
/*4.4. 字符串转换成枚举类型 valueOf*/
ColorTest ct = ColorTest.valueOf("RED");
System.out.println("4.4.RED class类:" + ct.getClass());
try {
System.out.println("4.4.red class类:" + ColorTest.valueOf("red"));
} catch (Exception e) {
e.printStackTrace();
}
/*equal()方法*/
System.out.println("4.5. " + "RED".equals(ColorTest.RED));
}
}
运行结果:
参考代码:
案例二:普通类中,定义enum类和enum的构造函数
案例代码:
package test.ENum;
import java.util.EnumMap;
import java.util.EnumSet;
public class ColorENumTest2 {
public enum ColorTest{
RED("红色"),GREEN(""),BLANK("白色");
// 定义私有变量
private String name ;
//构造方法必须为私有
private ColorTest(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
//1.遍历枚举类型
traversalEnum();
//2.EnumMap对象使用
testEnumMap();
//3.EnumSet使用
testEnumSet();
}
private static void traversalEnum() {
for(ColorTest ct : ColorTest.values()){
System.out.println("1. 当前颜色为:" + ct);
System.out.println("1. 当前颜色name为:" + ct.name);
System.out.println("1. 当前颜色所在位置为:" + ct.ordinal());
}
}
/*enumMap与其他map使用方式相似,不同的是enumMap的key是枚举类型,而非字符串*/
private static void testEnumMap() {
EnumMap<ColorTest, String> enumMapTest = new EnumMap<ColorTest,String>(ColorTest.class);
enumMapTest.put(ColorTest.RED, "红灯停");
enumMapTest.put(ColorTest.GREEN, "绿灯行");
enumMapTest.put(ColorTest.BLANK, "白灯你是要上天么?");
for(ColorTest ct : ColorTest.values()){
System.out.println("2. " + ct.name + " 对应的是:" + enumMapTest.get(ct));
}
}
private static void testEnumSet() {
EnumSet<ColorTest> set = EnumSet.allOf(ColorTest.class);
System.out.println("3. set: " + set);
for (ColorTest ct : set) {
System.out.println("3. " + ct);
}
}
}
运行结果:
案例三:单独的enum类
enum类代码:
package test.ENum;
public enum Colorr {
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),BLUE("蓝色",4);
private String name;
private int index;
private Colorr(String name,int index){
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
普通java类代码:
package test.ENum;
public class ENumTest {
public static void main(String[] args) {
System.out.println(Colorr.RED);
showColor(Colorr.RED);
}
private static void showColor(Colorr color) {
switch (color) {
case BLANK:
System.out.println(color);
break;
case RED:
System.out.println(color);
break;
default:
System.out.println(color);
break;
}
}
}
运行结果:
参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35295851
参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35559117
参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35295851
参考博客地址:http://www.cnblogs.com/hyl8218/p/5088287.html
参考博客地址:http://mangocool.com/detail_1_1432712967939.html
参考书籍:Java核心技术 卷1 基础知识 第9版
不过因为工作中,很少用到这个枚举类型,即使需要定义常量,大多数也是用public static fianl。。。
最近看到,我去网上查阅了一番资料,看了一些博主写的文章,结合这些资料,和我自己测试结果,来粗浅的记录下自己的心得。
说道枚举,就不得不说关键词:enum
;
下面来说一下enum
的几个需要我们了解的点:
1、enum
定义的类型是一个类,这些类都集成Enum类,即继承:java.lang.Enum类。既然继承了Enum,那么显而易见,就继承了Enum的很多方法。
2、enum
定义是一个final类,是不可再次被继承。enum 定义的类里的常量都是final的静态常量。
3、enum
定义的类中有构造器、方法、和数据域。但是枚举的构造器与一般普通类有些区别:
①构造器只在构造枚举值时被调用。
②构造器中只能私有private,决不能有public构造器。
JAVA枚举分为三个案例来讲:
案例一:普通JAVA类中定义package test.ENum类;
案例代码:
package test.ENum;
public class ColorEnumTest {
public enum ColorTest{
RED,GREEN,BLANK
}
public static void main(String[] args) {
//1.输入枚举名
System.out.println("1. " + ColorTest.RED);
//2.枚举与switch的结合使用,遍历ColorTest选中的数据
ColorTest test = ColorTest.RED;
switch (test) {
case RED:
System.out.println("2.是RED");
break;
case GREEN:
System.out.println("2.是GREEN");
break;
case BLANK:
System.out.println("2.是BLANK");
break;
default:
break;
}
//3.枚举与for循环的结合使用,通过values获取所有值
for(ColorTest ct : ColorTest.values()){
System.out.println("3.本次打印的颜色是:" + ct);
}
//4.枚举常用方法
/*4.1.获取ColorTest值个数 通过values()方法将ColorTest转换成一个数组,获取其个数*/
System.out.println("4.1. ColorTest值有" + ColorTest.values().length + "个");
/*4.2.ordinal()获取索引位置 起始值为:0*/
System.out.println("4.2. RED所在位置是:" + ColorTest.RED.ordinal());
/*4.3.枚举默认实现了java.lang.Comparable接口,-1之前,0位置相同,1之后*/
System.out.println("4.3. " + ColorTest.RED.compareTo(ColorTest.GREEN));
/*4.4. 字符串转换成枚举类型 valueOf*/
ColorTest ct = ColorTest.valueOf("RED");
System.out.println("4.4.RED class类:" + ct.getClass());
try {
System.out.println("4.4.red class类:" + ColorTest.valueOf("red"));
} catch (Exception e) {
e.printStackTrace();
}
/*equal()方法*/
System.out.println("4.5. " + "RED".equals(ColorTest.RED));
}
}
运行结果:
参考代码:
package test.ENum; public class ColorEnumTest { public enum ColorTest{ RED,GREEN,BLANK } public static void main(String[] args) { //1.输入枚举名 System.out.println("1. " + ColorTest.RED); //2.枚举与switch的结合使用,遍历ColorTest选中的数据 ColorTest test = ColorTest.RED; switch (test) { case RED: System.out.println("2.是RED"); break; case GREEN: System.out.println("2.是GREEN"); break; case BLANK: System.out.println("2.是BLANK"); break; default: break; } //3.枚举与for循环的结合使用,通过values获取所有值 for(ColorTest ct : ColorTest.values()){ System.out.println("3.本次打印的颜色是:" + ct); } //4.枚举常用方法 /*4.1.获取ColorTest值个数 通过values()方法将ColorTest转换成一个数组,获取其个数*/ System.out.println("4.1. ColorTest值有" + ColorTest.values().length + "个"); /*4.2.ordinal()获取索引位置 起始值为:0*/ System.out.println("4.2. RED所在位置是:" + ColorTest.RED.ordinal()); /*4.3.枚举默认实现了java.lang.Comparable接口,-1之前,0位置相同,1之后*/ System.out.println("4.3. " + ColorTest.RED.compareTo(ColorTest.GREEN)); /*4.4. 字符串转换成枚举类型 valueOf*/ ColorTest ct = ColorTest.valueOf("RED"); System.out.println("4.4.RED class类:" + ct.getClass()); try { System.out.println("4.4.red class类:" + ColorTest.valueOf("red")); } catch (Exception e) { e.printStackTrace(); } /*equal()方法*/ System.out.println("4.5. " + "RED".equals(ColorTest.RED)); } } package test.ENum; import java.util.EnumMap; import java.util.EnumSet; public class ColorENumTest2 { public enum ColorTest{ RED("红色"),GREEN(""),BLANK("白色"); // 定义私有变量 private String name ; //构造方法必须为私有 private ColorTest(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } public static void main(String[] args) { //1.遍历枚举类型 traversalEnum(); //2.EnumMap对象使用 testEnumMap(); //3.EnumSet使用 testEnumSet(); } private static void traversalEnum() { for(ColorTest ct : ColorTest.values()){ System.out.println("1. 当前颜色为:" + ct); System.out.println("1. 当前颜色name为:" + ct.name); System.out.println("1. 当前颜色所在位置为:" + ct.ordinal()); } } /*enumMap与其他map使用方式相似,不同的是enumMap的key是枚举类型,而非字符串*/ private static void testEnumMap() { EnumMap enumMapTest = new EnumMap(ColorTest.class); enumMapTest.put(ColorTest.RED, "红灯停"); enumMapTest.put(ColorTest.GREEN, "绿灯行"); enumMapTest.put(ColorTest.BLANK, "白灯你是要上天么?"); for(ColorTest ct : ColorTest.values()){ System.out.println("2. " + ct.name + " 对应的是:" + enumMapTest.get(ct)); } } private static void testEnumSet() { EnumSet set = EnumSet.allOf(ColorTest.class); System.out.println("3. set: " + set); for (ColorTest ct : set) { System.out.println("3. " + ct); } } }
案例二:普通类中,定义enum类和enum的构造函数
案例代码:
package test.ENum;
import java.util.EnumMap;
import java.util.EnumSet;
public class ColorENumTest2 {
public enum ColorTest{
RED("红色"),GREEN(""),BLANK("白色");
// 定义私有变量
private String name ;
//构造方法必须为私有
private ColorTest(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) {
//1.遍历枚举类型
traversalEnum();
//2.EnumMap对象使用
testEnumMap();
//3.EnumSet使用
testEnumSet();
}
private static void traversalEnum() {
for(ColorTest ct : ColorTest.values()){
System.out.println("1. 当前颜色为:" + ct);
System.out.println("1. 当前颜色name为:" + ct.name);
System.out.println("1. 当前颜色所在位置为:" + ct.ordinal());
}
}
/*enumMap与其他map使用方式相似,不同的是enumMap的key是枚举类型,而非字符串*/
private static void testEnumMap() {
EnumMap<ColorTest, String> enumMapTest = new EnumMap<ColorTest,String>(ColorTest.class);
enumMapTest.put(ColorTest.RED, "红灯停");
enumMapTest.put(ColorTest.GREEN, "绿灯行");
enumMapTest.put(ColorTest.BLANK, "白灯你是要上天么?");
for(ColorTest ct : ColorTest.values()){
System.out.println("2. " + ct.name + " 对应的是:" + enumMapTest.get(ct));
}
}
private static void testEnumSet() {
EnumSet<ColorTest> set = EnumSet.allOf(ColorTest.class);
System.out.println("3. set: " + set);
for (ColorTest ct : set) {
System.out.println("3. " + ct);
}
}
}
运行结果:
案例三:单独的enum类
enum类代码:
package test.ENum;
public enum Colorr {
RED("红色",1),GREEN("绿色",2),BLANK("白色",3),BLUE("蓝色",4);
private String name;
private int index;
private Colorr(String name,int index){
this.name = name;
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
普通java类代码:
package test.ENum;
public class ENumTest {
public static void main(String[] args) {
System.out.println(Colorr.RED);
showColor(Colorr.RED);
}
private static void showColor(Colorr color) {
switch (color) {
case BLANK:
System.out.println(color);
break;
case RED:
System.out.println(color);
break;
default:
System.out.println(color);
break;
}
}
}
运行结果:
参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35295851
参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35559117
参考博客地址:http://blog.csdn.net/sup_heaven/article/details/35295851
参考博客地址:http://www.cnblogs.com/hyl8218/p/5088287.html
参考博客地址:http://mangocool.com/detail_1_1432712967939.html
参考书籍:Java核心技术 卷1 基础知识 第9版
相关文章推荐
- java枚举类型enum的使用
- Java enum 枚举类型
- 深入理解Java枚举类型(enum)
- Java enum枚举类型
- Java基础三:enum枚举类型
- java中枚举类型enum的简单用法
- Java 中的枚举类型(enum)怎么使用???
- java枚举类型enum的使用
- java 枚举类型enum 的使用
- Java enum 枚举类型使用举例
- java 枚举类型enum 的使用
- java 枚举类型enum 的使用
- Java枚举类型入门(2)_java 枚举类型enum 的使用_比(1)稍微深入些
- java枚举类型enum的使用
- 高阶Java枚举类型enum使用详解
- [Java] enum 枚举类型
- Java中枚举类型Enum的一种使用方式
- 【转】java枚举类型enum的使用
- java枚举类型enum的使用介绍
- Java中枚举类型Enum的一种使用方式