zoukankan      html  css  js  c++  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 stub
    4 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的数据结构。

  • 相关阅读:
    剑指offer-第二章排序之年龄排序
    剑指offer—第二章算法之快速排序
    java小程序(课堂作业02)
    关于java的一些小知识(课程作业01)
    Java从命令行接受多个数字并求和
    《大道至简》第一章读后感及伪代码
    大道至简读后感
    GCPC 2013_A Boggle DFS+字典树 CSU 1457
    Aizu 2155 Magic Slayer 背包DP
    UVALive 4255 Guess
  • 原文地址:https://www.cnblogs.com/lxl57610/p/5846165.html
Copyright © 2011-2022 走看看