Enum枚举常量

太过爱你忘了你带给我的痛 2022-06-07 05:42 310阅读 0赞

枚举类型定义:使用enum关键字,隐含了所创建的类是java.lang.Enum类的子类(java.lang.enum类是一个抽象类)

public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};
实际上该定义声明的是一个,刚好有4个实例

枚举类型符合通用模式: Class Enum<E extends<Enum E>>,其中E表示枚举类型的名称
枚举类型的每一个值都将被映射到protected Enum(String name,int ordinal);构造函数中,每个值都被转换成一个字符串,并且序数设置表示了被创建的顺序
eg.如上声明,实际上调用了4次Enum(String name,int ordinal):

  1. new Enum<Size>("SMALL",0);
  2. new Enum<Size>("MEDIUM",1);
  3. new Enum<Size>("LARGE",2);
  4. new Enum<Size>("EXTRA_LARGE",3);

可以在枚举类型中添加一些构造器、方法和域。构造器只在构造枚举常量的时候被调用

  1. public enum Size{
  2. SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");
  3. private String abbreviation;
  4. private Size(String abbreviation){
  5. this.abbreviation = abbreviation;
  6. }
  7. public String getAbbreviation(){
  8. return abbreviation;
  9. }
  10. }

SMALL(“S”),MEDIUM(“M”),LARGE(“L”),EXTRA_LARGE(“XL”);
1.如上是Size的构造函数,不能通过new语句调用,但可以在声明常量的时候进行调用,只需要常量后面加括号并且传递参数进去
2.不同的常量对象就有了不同的属性值,并且存放在字段abbreviation中
3.此外还定义了方法,在获得某个常量引用后就可以调用getAbbreviation()方法

枚举类的构造方法只能是private
比较两个枚举类型的值时,永远不需要调用equals,而直接使用==
获取枚举类型中的常量:枚举名.常量
枚举类型中的每个值都是一个对象

方法:
1.int compareTo(E other)
比较此枚举与指定对象的顺序。
2.Class<E> getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
3.String name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
4.int ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
5.static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
6.static Enum valueOf(Class enumClass,String name)
返回指定名字、给定类的枚举常量
7.枚举类型的静态values(),返货包含全部枚举值的数组
Size[] values = Size.values();


迅雷 Java选择题
What is the result of the following code?

  1. enum AccountType{
  2. SAVING,FIXED,CURRENT;
  3. private AccountType(){
  4. System.out.println("It is a account type.");
  5. }
  6. }
  7. class Enumone{
  8. public static void main(String[] args){
  9. System.out.println(AccountType.FIXED);
  10. }
  11. }

Answer:输出结果如下
It is a account type.
It is a account type.
It is a account type.
FIXED
解析:

1.枚举类在后台实现时,实际上是转化为一个继承了java.lang.Enum类的实体类,原先的枚举类型变为对应的实体类型

AccountType变成了个class AccountType

2.并且会生成一个新的构造函数,若原来有构造函数,则在此基础上添加两个参数,生成新的构造函数

  1. private AccountType(){
  2. System.out.println("It is a account type.");
  3. }

变成:

  1. private AccountType(String s,int i){
  2. super(s,i);
  3. System.out.println("It is a account type.");
  4. }

而且在该类中,会添加若干字段来代表具体的枚举类型:

  1. public static final AccountType SAVING;
  2. public static final AccountType FIXED;
  3. public static final AccountType CURRENT;

而且会添加一段static代码段:

  1. static{
  2. SAVING = new AccountType("SAVING",0);
  3. FIXED = new AccountType("FIXED",1);
  4. CURRENT = new AccountType("CURRENT",2);
  5. $VALUES = new AccountType[]{SAVING,FIXED,CURRENT};
  6. }

以此来初始化枚举类中的每一个具体类型。
在初始化过程中new AccountType构造函数被调用了三次,所以打印三次It is a account type.

发表评论

表情:
评论列表 (有 0 条评论,310人围观)

还没有评论,来说两句吧...

相关阅读

    相关 (enum)

    前言 实际上,枚举类型是特殊的类,和C语言C++中的枚举不太一样,下面我们做详细说明。关于枚举类型有一个单独的设计模式:即单例设计模式。单例类是一个类只有一个实例,那么多

    相关 enum

    枚举类型enum C++中,枚举类型(enumeration) 是一个被命名的整型常量的集合。和类一样,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型。C++包含

    相关 类(enum

    【1】什么是枚举类?     实例(也叫对象)有限且固定不变的类,在Java里被称为枚举类。     例如,季节类,它只有4个实例(春、夏、秋、冬),并且这4个实例不