java中的枚举_java中的枚举类

java中为了对参数类型使用限定,引入了泛型,实现了在编译期对参数类型是否合法的判断。同样,java为了对参数的值的限定,引入了枚举类,实现了在编译期对参数的值是否合法的判断。

首先我们用自定义类的方法实现枚举类,可以参考单例模式的实现思路,将类的构造方法设置为私有的,在类内部定义static的变量,只能直接通过类名访问自己定义的类,实现对类的值的限定。

1 public class TestEnum {

2

3 public static void main(String[] args) {

4 Weekday w = Weekday.Fri;

5 System.out.println(w);

6 System.out.println(Weekday.s);

7

8 }

9 }

10

11 class Weekday{

12 String weekday = null;

13 private Weekday(String str){

14 this.weekday = str;

15 }

16 static int s = 3000;

17 public static Weekday Sun = new Weekday("Sunday");

18 public static Weekday Mon = new Weekday("Monday");

19 public static Weekday Tues = new Weekday("Tuesday");

20 public static Weekday Wed = new Weekday("Wednesday");

21 public static Weekday Thu = new Weekday("Thurday");

22 public static Weekday Fri = new Weekday("Friday");

23 public static Weekday Sat = new Weekday("Saturday");

24

25 @Override

26 public String toString(){

27 return this.weekday;

28 }

29

30

31 }

使用的时候,每调用一次static属性,就创建了一个实例。静态的成员可以通过类名直接访问。

java中用enum表示枚举类,我们通过例子学习:

1 public class TestEnum1 {

2 public static void main(String[] args) {

3 //TODO Auto-generated method stub4 Num n = Num.Six;

5 System.out.println(n);

6 System.out.println(n.ordinal());//表示的数字,从0开始。7 System.out.println(Weekday1.FRI);

8 System.out.println(Weekday1.FRI.nextDay().nextDay());

9 System.out.println(Weekday1.FRI.nextDay().nextDay().ordinal());

10 }

11 }

12

13 enum Num{

14 Zero,One,Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten;

15 Num() {

16 System.out.println("this is null parameter constructor func");

17 }

18 }

19

20 enum Weekday1{

21 SUN("Sunday"),MON("Monday"),TUE("Tuesday"),WED("Wednesday"),THU("Thurday"),FRI("Friday"),SAT("Saturday");

22 String weekday1 = null;

23 Weekday1(String weekday1){

24 this.weekday1 = weekday1;

25 }

26 @Override

27 public String toString(){

28 return this.weekday1;

29 }

30 public Weekday1 nextDay() {

31 switch (this) {

32 case SUN:

33 return MON;

34 case MON:

35 return TUE;

36 case TUE:

37 return WED;

38 case WED:

39 return THU;

40 case THU:

41 return FRI;

42 case FRI:

43 return SAT;

44 default:

45 return SUN;

46 }

47

48 }

49 }

通过两个类的比较和输出可以总结出:

enum是一个特殊的类,他定义了自己的常量,而且类型是自己,默认的toString方法是把自己的名字转换成string。

enum也有普通类的大部分用法,包括构造函数,私有变量,抽象函数(比如匿名内部类实现),不过用自定义成员的时候。必须把枚举常量放在枚举类的第一行。每个枚举常量在定义的时候使用了一次构造函数,在其他类中调用的时候也会再调用一次构造函数,两次的值一样,但是指向的实际对象其实是不一样的(可以通过构造函数的打印次数得出此结论)。ordinal()函数返回枚举常量的序数(在声明中的位置,初始常量的序数是0),被设计用于复杂的基于enum的数据结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值