Java Enum类的笔记

coreJava Enum笔记和分析

public class EnumTest {  
    public static void main(String[] args) {  
        Scanner in = new Scanner(System.in);
        System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
        String input = in.next().toUpperCase();
        Size size = Enum.valueOf(Size.class, input);
      //这里的Size.class代表匹配的Class对象, 这里是"class enum.Size"

        System.out.println("size=" + size);
        System.out.println("abbreviation=" + size.getAbbreviation());
        if (size == Size.EXTRA_LARGE)
            System.out.println("Good job--you paid attention to the _.");      
   }
}

enum Size {
   SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");
   //构造枚举值 SMALL("S")

   private Size(String abbreviation) {
       this.abbreviation = abbreviation; 
   }

   public String getAbbreviation() {
       return abbreviation; 
   }

   private String abbreviation;
}

enum很像特殊的class,实际上enum声明定义的类型是一个类。 所有的枚举类型都是类库中Enum类的子类(java.lang.Enum)。它们继承了这个Enum中的许多方法。编译器会将enum类型编译成了一个字节码文件:Size.class

  • Size枚举类实际是一个不可以被继承的final类。其枚举值都是Size类型的类静态常量, 我们可以通过下面的方式来得到Size枚举类的一个实例:

    Size size=Size.SMALL;

    注意:这些枚举值都是public static final的,也就是我们经常所定义的常量方式,因此枚举类中的枚举值最好全部大写。
  • 如果需要,可以在枚举类型中添加构造器,方法和域。
    1. 构造器只是在构造枚举常量的时候被调用
    2. 构造器只能private,不允许有public构造器。 这样可以保证无法构造枚举类的新实例。但枚举类的方法和数据域可以允许外部访问。

    下面是java.lang.Enum类的几个方法:
    (1) ordinal()方法: 返回枚举值在枚举类种的顺序。这个顺序根据枚举值声明的顺序而定。

        Size.SMALL.ordinal("SMALL");//返回结果:0
        Size.MEDIUM.ordinal("MEDIUM");//返回结果:1

    (2) compareTo()方法: Enum实现了java.lang.Comparable接口,因此可以比较象与指定对象的顺序。Enum中的compareTo返回的是两个枚举值的顺序之差。

        Size.SMALL.compareTo(Size.MEDIUM);  //返回结果 -1

    (3) values()方法: 静态方法,返回一个包含全部枚举值的数组。

        Size[] values = Size.values();

    (4) toString()方法: 返回枚举常量的名称。

        String aSize = Size.SMALL.toString();//将返回"SMALL"

    (5) valueOf()方法: 这个方法和toString方法是相对应的,返回带指定名称的指定枚举类型的枚举常量。类库中的valueOf方法定义如下:

    public static <T extends Enum<T>> T valueOf(Class<T> enumType, String name);
    
        Size s = Enums.valueOf(Size.class, "SMALL");

    (6) equals()方法: 比较两个枚举类对象的引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值