网站首页 > java教程 正文
原文
5.7 枚举类
我们在第3章已经已经看到如何定义枚举类型。下面是一个典型的例子:
publlc enum Size { SMALL,MEDIUM, LARGE,EXTRA LARGE }
?实际上,这个声明定义的类型是一个类,它刚好有 4 个实例,不可能构造新的对象。
?因此,在比较枚举类型的值时,并不需要使用 equals,可以直接使用 == 来比较。
?如果需要的话,可以为枚举类型增加构造器、方法和字段。当然,构造器只是在构造枚举常量的时候调用。下面是一个示例:
public enum Size{
SMALL("S") ,
MEDIUM("M"),
LARGE("L"),
EXTRA_LARGE("XL");
private String abbreviation;
Size(String abbreviation){
this.abbreviation = abbreviation;
}
// automatically private
public String getAbbreviation{
return abbreviation;
}
}
枚举的构造器总是私有的。可以像前例中一样省略 private 修饰符。如果声明一个 enum 构造器为 public或 protected,则会出现语法错误。
?所有的枚举类型都是抽象类 Enun 的子类。它们继承了这个类的许多方法。其中,最有用的一个是toString,这个方法会返回枚举常量名。例如,Size.SMALL.toString()将返回字符串“SMALL"。
?toString 的逆方法是静态方法 valueOf。例如,以下语句
?Size s = Enum.value0f(Size.class,"SMALL");
?将s设置成Size.SMALL。
?每个枚举类型都有一个静态的 values 方法,它将返回一个包含全部枚举值的数组。例如如下调用
Size[ ] values = Size.values();
?将返回包含元素 Size.SMALL、Size.MEDIUM、Size.LARGE 和 Size.EXTRA_LARGE 的数组。
?ordinal 方法返回一个枚举常量在 enum声明中的位置,位置从0开始计数。例如,Size.NEDIUM.ordinal() 返回1。
程序清单 5-12 中的小程序演示了如何处理枚举类型。
?注释: Enum类有一个类型参数,不过为简单起见,我们省略了这个类型参数。例如,实际上枚举类型 Size 扩展了Enum<Size>。类型参数会在 compareTo 方法中使用 (compareTo方法将在第 6章中介绍,类型参数将在第8章中介绍)。
程序清单5-12 enums/EnumTest.java
package enums;
import java.util.*;
/**
* This program demonstrates enumerated types.
* @version 1.0 2004-05-24
* @author Cay Horstmann
*/
public class EnumTest
{
public static void main(String[] args)
{
var 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);
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");
private Size(String abbreviation) { this.abbreviation = abbreviation; }
public String getAbbreviation() { return abbreviation; }
private String abbreviation;
}
API: java.lang.Enun<E> 5
?static Enum value0f(Class enumClass, String name) 返回给定类中有指定名字的枚举常量。
String toString() 返回枚举常量名
int ordinal() 返回枚举常量在 enun声明中的位置,位置从0开始计数
int coapareTo(E other) 如果枚举常量出现在 other 之前,则返回一个负整数;如果 this=other,则返回0;否则,返回一个正整数。枚举常量的出现次序在 enun 声明中给出。
猜你喜欢
- 2024-10-06 关于Java中枚举Enum的深入剖析(java中枚举类型的使用)
- 2024-10-06 常用类及枚举类(一)(枚举类和普通类的区别)
- 2024-10-06 JAVA ---- 枚举/注解/反射(java中枚举的作用)
- 2024-10-06 深入剖析Java Enum类型(javaenum使用实例)
- 2024-10-06 Java enum——不一样的枚举对象(java 枚举使用)
- 2024-10-06 Java的enum的用法详解(java enum使用)
- 2024-10-06 学习廖雪峰的JAVA教程---java核心类(枚举类)
- 2024-10-06 Java枚举(JAVA枚举类型怎么用)
- 2024-10-06 java高级特性之泛型和枚举(java 泛型实现)
- 2024-10-06 java里枚举非常实用的3个方法,程序员一般都不注意
你 发表评论:
欢迎- 最近发表
-
- 你真的会用 Java 中的线程池吗?多个企业级线程池工具类封装实践
- 线程池的实现原理、优点与风险、以及四种线程池实现
- Java线程池ThreadPoolExecutor实现原理剖析
- 深入分析线程池的实现原理(线程池是干嘛的)
- 一文搞懂JAVA线程池工作原理(java线程池的工作流程)
- Java线程池的工作原理(java线程池的实现原理)
- 5分钟读懂C#中TcpClient、TcpListener和Socket三个类的角色
- JVM对象的创建过程(jvm运行过程中创建的对象一般存放在方法区)
- 对象组成与Java内存模型JMM分析(java对象在内存中存储的结构)
- JVM对象内存分配详细过程(栈上分配->TLAB->老年代->Eden区)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)