java之enum枚举类,javaenum枚举
java之enum枚举类,javaenum枚举
实质上定义出来的类型继承自Java.lang.Eum类型,
枚举的成员其实就是我们定义的枚举类型的一个实例Instance,被预设为final,所以无法改变他们,他们也是static成员,所以可以通过类型名称直接使用他们。
他们都是公开的public,枚举中的每一个成员默认都是public static final的,而每个枚举的成员就是我们的枚举类型的一个实例instance,换句话说,当定义了一个枚举类型后,在编译时刻就能确定枚举类型有几个类型,分别是什么,在运行期间我们无法在使用该枚举类型创建新的实例了,这些实例在编译期间就已经完全确定下来了,所以在Color myColor = Color.Red 中,没有newColor(),而是直接复制
枚举,成员默认类型,public static final,有几个类型就有几个实例instance
枚举像一个类,又像一个数组
它不能有public的构造函数,这样做可以保证客户代码没有办法新建一个enum的实例。
所有枚举值都是public , static , final的。注意这一点只是针对于枚举值
Enum默认实现了java.lang.Comparable接口
Enum覆载了了toString方法,因此我们如果调用Color.Blue.toString()默认返回字符串”Blue
Enum提供了一个valueOf方法,这个方法和toString方法是相对应的。调用valueOf(“Blue”)将返回Color.Blue.因此我们在自己重写toString方法的时候就要注意到这一点,一把来说应该相对应地重写valueOf方法
Enum还提供了values方法,这个方法使你能够方便的遍历所有的枚举值
枚举类型提供了两个有用的静态方法,values() 和 valueOf() ,可以很方便的使用它们
public class EnumTest01 {
public static void doWhat(OP op){
switch(op){
case TURE_LEFT:
System.out.println("向u24038 转);
break;
case TURE_RIGHT:
System.out.println("向u21491 转);
break;
case SHOOT:
System.out.println("射u20987 ");
break;
}
}
public static void main(String[] args) {
EnumTest01.doWhat(OP.SHOOT);
}
}
enum OP{
TURE_LEFT,TURE_RIGHT,SHOOT;
}
用法一:常量
Java代码
public enum Color {
RED, GREEN, BLANK, YELLOW
}
用法二:switch
JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case YELLOW:
color = Signal.RED;
break;
case GREEN:
color = Signal.YELLOW;
break;
}
}
}
用法三:向枚举中添加新方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
用法四:覆盖枚举的方法
下面给出一个toString()方法覆盖的例子。
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//覆盖方法
@Override
public String toString() {
return this.index+"_"+this.name;
}
}
用法五:实现接口
所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
public interface Behaviour {
void print();
String getInfo();
}
public enum Color implements Behaviour{
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
//接口方法
@Override
public String getInfo() {
return this.name;
}
//接口方法
@Override
public void print() {
System.out.println(this.index+":"+this.name);
}
}
用法六:使用接口组织枚举
public interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
相关文章
- 暂无相关文章
用户点评