枚举
0. 为什么要有枚举
答: 要定义星期几或性别的变量,该怎么定义?假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday = 0;或即使使用常量方式也无法阻止意外。
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
1. 定义枚举类, 使用enum关键字:
[java]
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.SUN;
//枚举类对象的自带的方法
System.out.println(weekDay2); //枚举类实现了toString方法
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal()); //序数, 该对象是枚举类对象的第几个(从0开始)
//枚举类的静态方法
System.out.println(WeekDay.valueOf("SUN")); //有名称获取元素对象
System.out.println(Arrays.toString(WeekDay.values())); //以数组形式获取枚举类中所有的元素
}
public enum WeekDay{
SUN, MON, TUE, WED, THI, FRI, SAT; //* 分号可以省略
}
}
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.SUN;
//枚举类对象的自带的方法
System.out.println(weekDay2); //枚举类实现了toString方法
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal()); //序数, 该对象是枚举类对象的第几个(从0开始)
//枚举类的静态方法
System.out.println(WeekDay.valueOf("SUN")); //有名称获取元素对象
System.out.println(Arrays.toString(WeekDay.values())); //以数组形式获取枚举类中所有的元素
}
public enum WeekDay{
SUN, MON, TUE, WED, THI, FRI, SAT; //* 分号可以省略
}
}
2. 带有构造方法的枚举类:
[java]
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.SUN;
//枚举类对象的自带的方法
System.out.println(weekDay2); //枚举类实现了toString方法
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal()); //序数, 该对象是枚举类对象的第几个(从0开始)
//枚举类的静态方法
System.out.println(WeekDay.valueOf("SUN")); //有名称获取元素对象
System.out.println(Arrays.toString(WeekDay.values())); //以数组形式获取枚举类中所有的元素
}
public enum WeekDay{
SUN(1), MON(), TUE, WED, THI, FRI, SAT; //* 如果只有这一行的话,分号可以省略
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
}
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.SUN;
//枚举类对象的自带的方法
System.out.println(weekDay2); //枚举类实现了toString方法
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal()); //序数, 该对象是枚举类对象的第几个(从0开始)
//枚举类的静态方法
System.out.println(WeekDay.valueOf("SUN")); //有名称获取元素对象
System.out.println(Arrays.toString(WeekDay.values())); //以数组形式获取枚举类中所有的元素
}
public enum WeekDay{
SUN(1), MON(), TUE, WED, THI, FRI, SAT; //* 如果只有这一行的话,分号可以省略
private WeekDay(){System.out.println("first");}
private WeekDay(int day){System.out.println("second");}
}
}
3. 带有抽象方法的枚举, 例子:
[java]
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.SUN;
//枚举类对象的自带的方法
System.out.println(weekDay2); //枚举类实现了toStrin