JDK5.0新特性系列---3.枚举类型

/**
 *enum关键字表示枚举类型,它的作用相当于类声明中的class关键字
 *枚举类型不能有public的构造方法
 *所有的枚举值都是public、static、final的,这些修饰符都是自动加上,无须程序员手动添加
 *枚举值之间用逗号","分开,最后一个枚举值后面接分号";"
 *每一个枚举值是一个枚举类型的实例
 *可以在枚举类型中定义非枚举值变量,这些变量可以使用任何修饰符
 *变量和方法的定义必须在枚举值后面定义
*/
public class EnumType {
       /**人Person的枚举类型*/
       enum Person{
              CHINESE,    //中国人
              AMERICAN,   //美国人
              ENGLISH;    //英国人
       }
       public static void main(String[] args){
              System.out.println("Person枚举值的数目: " + Person.values().length);
              //遍历枚举类型中的所有值
              System.out.println("Person枚举值如下: ");
              Person[] ps = Person.values();   //values()方法返回Person类型的数组
              for (Person p : ps){
                     System.out.print(p + " ");   //toString()方法返回枚举值的名称,此处打印CHINESE AMERICAN ENGLISH
              }
              System.out.println();
              Person p = Person.CHINESE;
              //比较枚举值
              if(p == Person.CHINESE){
                     System.out.println("p' value equals Person.CHINESE");
              }
              //使用valueOf获得字符串描述的枚举值
              p = Person.valueOf("AMERICAN");
              //在switch中使用枚举值
              //switch中可以放置的类型有byte,short,int,char,enum,注意没有long
               switch(p){
              case CHINESE:
                     System.out.println("p is Chinese");
                     break;
              case AMERICAN:
                     System.out.println("p is American");
                     break;
              case ENGLISH:
                     System.out.println("p is English");
                     break;
              }
              //获得枚举值在枚举类型中声明的顺序
              System.out.println("AMERICAN的序号: " + Person.AMERICAN.ordinal());
              System.out.println("CHINESE的序号: " + Person.CHINESE.ordinal());
              System.out.println("ENGLISH的序号: " + Person.ENGLISH.ordinal());
             
              //使用更复杂的枚举类型ComplexPerson
              ComplexPerson cp = ComplexPerson.CHINESE;
              //因为为CHINESE枚举值覆盖了toString()方法,所以调用的是CHINESE的toString方法
              System.out.println("cp.toString(): " + cp);
              cp = ComplexPerson.AMERICAN;
              //因为没有为AMERICAN枚举值覆盖toString方法,所以调用默认的toSting方法
              cp = ComplexPerson.OTHER;
              System.out.println("cp.getValue(): " + cp.getValue());
       }
       /**一个更复杂的枚举类型*/
       enum ComplexPerson{
              //枚举值
              //CHINESE的value属性为"中国人"
              CHINESE("中国人"){
                      public String toString(){
                            return "这是个中国人";
                     }
              },
              AMERICAN("美国 人"),
              ENGLISH("英国人"){
                     public String toString(){
                            return "这是个英国佬";
                     }
              },
              OTHER{
                     public String toString(){
                            return "这是个其它国家的人";
                     }
              };
              private String value = null; //枚举类值的value属性,只能声明在枚举值的后面
              //默认的构造方法
              ComplexPerson(){
                     value = "其他人";
              }
              //带参数的构造方法
              ComplexPerson(String value){
                     this.value = value;
              }
              //获取value属性
               public String getValue(){
                     return this.value;
              }
       }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值