一.什么是枚举?
枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。说白了就是一个构造方法私有化,将对象的属性封装在了枚举的实例中,更加的安全和实用,以及简单明了的一个方式。
二.枚举的特点
1.枚举用的是enum关键字进行的定义(语法:public enum 枚举方法名{代码块})。
2.枚举变量之间用逗号隔开,且枚举变量用大写,多个单词之间用"_"(下滑线)隔开,比如:INT_SUM。
3.定义完变量之后,以分号结束,如果只是有枚举变量,而不是自定义变量,分号可以省略。
4.只需要类名.变量名就可以召唤没变量了,和静态变量一样,通过类名.属性的方式。
枚举的使用
1.枚举常量的使用
/**
* 枚举常量
*/
public enum FinalEnumStudy {
RED,
BLANK,
GREEN,
YELLOW
}
2.枚举Switch的使用
//首先定义一个SwitchEnumStudy枚举类
/**
* 枚举Switch
*/
public enum SwitchEnumStudy {
GREEN,
RED,
BLANK
}
//然后定义一个SwitchEnumStudy2类使用Switch
public class SwitchEnumStudy2 {
SwitchEnumStudy color = SwitchEnumStudy.RED;
public void change () {
switch(color){
case RED:
color = SwitchEnumStudy.GREEN;
System.out.println(color);
break;
case GREEN:
color = SwitchEnumStudy.RED;
System.out.println(color);
break;
case BLANK:
color = SwitchEnumStudy.BLANK;
System.out.println(color);
break;
}
}
publci static void main(String[] args){
SwitchEnumStudy2 switchEnumStudy2 = new SwitchEnumStudy2();
swtichEnumStudy2.change();
}
}
3.枚举类中添加新方法
/**
* 枚举方法
*/
public enum EnumMethodStudy {
RED(1, "红色"),
GREEN(2, "绿色"),
BLUE(3, "蓝色"),
YELLOW(4, "绿色")
//注意声明变量的顺序
private int index;
private String name;
//构造方法
EnumMethodStudy(int index, String name) {
this.index = index;
this.name = name;
}
//静态方法
public static String getName(int index){
EnumMethodStudy[] values = EnumMethodStudy.values();
for (EnumMethodStudy value : values) {
if (value.getIndex() == index) {
return value.neme;
}
}
return null;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void main(String[] args) {
Stirng name = EnumMethodStudy.getName(1);
System.out.println(name);
System.out.println(EnumMethodStudy.BLUE.getName());
EnumMethodStudy[] values = EnumMethodStudy.values();
for (EnumMethodStudy value : values) {
System.out.println(value.getName());
System.out.ptintln(value.name);
}
}
}
1.values()方法就是将枚举类中所有的实例名称遍历出来
2.name()方法就是将枚举类中的所有的实例值遍历出来
4.覆盖枚举的方法
public enum ToStringEnumMethod {
RED(1, "红色"),
GREEN(2, "绿色"),
BLANK(3, "黑色");
private String name;
private int index;
ToStringEnumMethod(int i, String index) {
this.index = i;
this.name = index;
}
@Override
public String toString() {
return "ToStringEnumMethod{" +
"name='" + name + '\'' +
", index=" + index +
'}';
}
public static void main(String[] args) {
System.out.println(ToStringEnumMethod.RED.toString());
System.out.println(ToStringEnumMethod.GREEN.toString());
System.out.println(ToStringEnumMethod.BLANK.toString());
}
}
5.枚举接口的使用
/**
* 枚举接口
*/
public interface InterfaceEnumStudy {
public void println();
public String getInfo();
}
/**
* 实现类
*/
public enum InterfaceEnumStudy2 implements InterfaceEnumStudy {
RED("红色", 1),
GREEN("绿色", 2),
BLANK("黑色", 3);
private String name;
private int index;
InterfaceEnumStudy2(String name, int index) {
this.name = name;
this.index = index;
}
public void println() {
System.out.println(this.name + " + " + this.index);
}
public String getInfo() {
return this.name;
}
public static void main(String[] args) {
System.out.println(InterfaceEnumStudy2.RED.getInfo());
InterfaceEnumStudy2.GREEN.println();
}
}
6.使用组织接口枚举
/**
* 组织接口
*/
public interface ZhuZhiEnumStudy {
enum Coffee implements ZhuZhiEnumStudy{
BLANK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO
}
enum Dessert implements ZhuZhiEnumStudy{
FRUIT, CAKE, GELATO
}
//两个枚举类都进行实现ZhuZhiEnumStudy接口
}
public class ZhuZhiEnumStudy2 {
private static void testImplementsInterface() {
for (ZhuZhiEnumStudy.Coffee coffee : ZhuZhiEnumStudy.Coffee.values()) {
System.out.print(coffee + " ");
}
System.out.println();
ZhuZhiEnumStudy.Dessert[] values = ZhuZhiEnumStudy.Dessert.values();
for (ZhuZhiEnumStudy.Dessert dessertEnum : values) {
System.out.print(dessertEnum);
}
System.out.println();
}
public static void main(String[] args) {
testImplementsInterface();
ZhuZhiEnumStudy zhuZhiEnumStudy = ZhuZhiEnumStudy.Dessert.CAKE;
System.out.println(zhuZhiEnumStudy);
zhuZhiEnumStudy = ZhuZhiEnumStudy.Coffee.BLANK_COFFEE;
System.out.println(zhuZhiEnumStudy);
}
}
//枚举遍历通过testImplementsInterface方法进行遍历,这种方式在我们定义枚举类多且定义要求分明的时候会用到。