目录
枚举的定义与使用:
1、枚举是一种引用数据类型。
2、枚举定义在类的位置。
3、枚举类型的定义:enum 枚举类型名{ 枚举值1,枚举值2...... } 。
enum Season{
spring,summer,autumn,winter;
// 常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天
// 系统会自动添加 public static final 修饰
}
4、要用枚举类型的变量来接收枚举类型。
Season s = Season.autumn;
4、结果只有两种情况的,建议使用布尔类型。结果如果超过两种并且可以全部列举出来,建议使用枚举类型。例如:颜色、四季、星期等都可以使用枚举类型。
5、枚举编译之后也是生成class文件。
6、枚举中的每一个值可以看做是常量。
7、枚举类型的变量只能存储这个类型声明中给定的某个枚举值,或特殊值null表示这个变量没有设置任何值。
8、两个枚举类型的值之间的比较可以直接使用 “==” ,并不需要调用 equals() 。
枚举类常用的方法:
values()方法(静态方法):
values( ) 方法可以将枚举的所有成员以数组形式返回,也可以通过该方法获取枚举类型的成员。
enum Season{
spring,summer,autumn,winter;
// 常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天
// 系统会自动添加 public static final 修饰
}
public class SeasonEnum {
public static void main(String[] args) {
// 迭代季节
for (Season season : Season.values()) {
System.out.println(season);
}
}
}
运行结果:
ordinal()方法(实例方法):
ordinal() 方法可以获取一个成员在枚举中的索引位置。
Color类型的变量就是Color的一个实例对象,可以调用Color枚举类的实例方法
enum Season{
spring,summer,autumn,winter;
}
public class SeasonEnum {
public static void main(String[] args) {
// 迭代季节
for (Season season : Season.values()) {
// ordinal可以找到每个枚举常量的索引,就像数组索引一样。
System.out.println(season+" 索引为 "+season.ordinal());
}
}
}
运行结果:
valueOf()方法(静态方法):
valueOf()方法返回指定字符串值的枚举常量。
可以调用自定义的枚举类的valueOf方法:
public class test {
public static void main(String[] args) {
Season season = Season.valueOf("summer");
}
}
enum Season{
spring,summer,autumn,winter;
}
也可以调用Enum父类的valueOf方法:
public class test {
public static void main(String[] args) {
Season season = Enum.valueOf(Season.class,"spring");
}
}
enum Season{
spring,summer,autumn,winter;
}
toString()方法(实例方法):
valueOf()方法返回指定枚举常量的名称(String类型)。
public class test {
public static void main(String[] args) {
String s = Season.spring.toString();
}
}
enum Season{
spring,summer,autumn,winter;
}
打印时也会调用toString方法。
可以向枚举类添加自定义的方法:
public class test {
public static void main(String[] args) {
// 调用getName静态方法
System.out.println(Color.getName(1));
// Color类型的变量就是Color的一个实例对象,可以调用Color枚举类的实例方法
Color color = Color.RED;
color.getName();
color.setName("粉红色");
color.getIndex();
color.setIndex(0);
}
}
public enum Color {
// 调用自身的构造方法
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
// 枚举类中的构造方法默认是静态的且必须是静态的,private修饰符可省略。
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
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;
}
}
对枚举变量使用switch语句:
JDK1.6之前的switch语句只支持int,char,enum类型,1.6版本之后可使用枚举类型。
enum Signal {
GREEN, YELLOW, RED
}
public class test {
public static void main(String[] args) {
Signal signal = null;
switch (signal) {
case RED:
System.out.println(1);
break;
case YELLOW:
System.out.println(2);
break;
case GREEN:
System.out.println(3);
break;
}
}
}