Enum枚举常量
来源:互联网 发布:千锋大数据视频教程 编辑:程序博客网 时间:2024/05/22 14:45
枚举类型定义:使用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):
new Enum<Size>("SMALL",0);new Enum<Size>("MEDIUM",1);new Enum<Size>("LARGE",2);new Enum<Size>("EXTRA_LARGE",3);
可以在枚举类型中添加一些构造器、方法和域。构造器只在构造枚举常量的时候被调用
public enum Size{ SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL"); private String abbreviation; private Size(String abbreviation){ this.abbreviation = abbreviation; } public String getAbbreviation(){ return abbreviation; }}
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?
enum AccountType{ SAVING,FIXED,CURRENT; private AccountType(){ System.out.println("It is a account type."); }}class Enumone{ public static void main(String[] args){ System.out.println(AccountType.FIXED); }}
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.并且会生成一个新的构造函数,若原来有构造函数,则在此基础上添加两个参数,生成新的构造函数
private AccountType(){ System.out.println("It is a account type."); }
变成:
private AccountType(String s,int i){ super(s,i); System.out.println("It is a account type.");}
而且在该类中,会添加若干字段来代表具体的枚举类型:
public static final AccountType SAVING;public static final AccountType FIXED;public static final AccountType CURRENT;
而且会添加一段static代码段:
static{ SAVING = new AccountType("SAVING",0); FIXED = new AccountType("FIXED",1); CURRENT = new AccountType("CURRENT",2); $VALUES = new AccountType[]{SAVING,FIXED,CURRENT};}
以此来初始化枚举类中的每一个具体类型。
在初始化过程中new AccountType构造函数被调用了三次,所以打印三次It is a account type.
- Enum枚举常量
- Java 常量定义-枚举enum
- 枚举类型Enum用来存放系统常量
- 枚举常量(enum)如何在CUDA核函数中使用
- 宏(#define),枚举型(enum)和const常量
- 注意!C语言的枚举enum是int型常量
- enum 枚举类型定义常量及调用的应用举例
- 枚举 ENum
- enum枚举
- Enum:枚举
- enum 枚举
- 枚举(enum)
- Enum 枚举
- enum(枚举)
- 枚举 Enum
- Enum枚举
- 枚举 Enum
- 枚举Enum
- fastjson反序列化 create instance error
- 在Qt工程中添加ui文件:使用/添加工程之外的ui文件
- 数据结构上机实践第四周项目5
- C#异常处理
- java 注解annotation的使用,以及反射如何获取注解
- Enum枚举常量
- 病毒自启动方式总结
- BZOJ1002 [FJOI2007]轮状病毒
- 适配android7.0:获取文件的Uri
- 第七周项目一 建立顺序环形队列算法库
- 自然语言处理
- 第四周 项目5- 循环双链表应用
- 第四周—建立单链表算法库
- Rhyme/LinuxStudyNote7.3.3—用户信息修改命令usermod