[黑马程序员] 高新_枚举、反射、泛型、类加载器、动态代理 (一)

2014-11-24 10:33:32 · 作者: · 浏览: 0

枚举
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