package com.an.testenum;
/*
* JDK1.5之后:
* 声明格式:
* 【修饰符】 enum 枚举类名{
* 常量对象列表(每一个对象之间使用,分割)
* }
*
* 要求:
* 1、常量对象列表必须在首行
* 2、如果常量对象列表后面还有其他的代码,那么需要在常量对象列表后面加;
*
* 特点:
* 1、枚举类型也是类,只不过有点特殊
* (1)声明关键字是enum,替代原来class
* (2)对象已经在枚举类中创建好了,不能在外面创建了
* (3)枚举类型中可以声明一个或重载的多个构造器,但是必须全部私有化
* (4)这个类默认不是继承Object,而是Object下面的java.lang.Enum类型
*
* java.lang.Enum类型:这是所有 Java 语言枚举类型的公共基本类。
* (1)toString()返回枚举的常量名
* (2)name():返回枚举的常量名
* (3)ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
* API中没有,是编译增加的
* 枚举类型[] values():返回所有的枚举的常量对象
* 枚举对象 valueOf("枚举常量名"):返回的是某个枚举常量对象
*
* Enum类型没有无参构造,子类默认调用的是它的有参构造
*
* 首行:
* this(),this(实参列表)
* super(),super(实参列表)
* package 包名;
* 枚举的常量对象列表
*/
public class TestEnum5 {
public static void main(String[] args) {
Week1 mon = Week1.MONDAY;
System.out.println(mon);//调用的toString方法 MONDAY:
System.out.println(mon.name());//返回常量名 MONDAY
System.out.println(mon.ordinal());//返回枚举常量的序数 0
Week1 sun = Week1.SUNDAY;
System.out.println(sun);//星期天:放假
System.out.println(sun.name());//SUNDAY
System.out.println(sun.ordinal());//6
Week1[] values = Week1.values();
for (Week1 week1 : values) {
System.out.println(week1);
/* MONDAY:
TUESDAY:
WEDNESDAY:
THURSDAY:
FRIDAY:
SATURDAY:
星期天:放假
*/
}
}
}
enum Week1{
MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY("星期天","放假");
private String name;
private String desc;
private Week1(){
this.name = name();
this.desc = "";
}
private Week1(String name){
this.name = name;
}
private Week1(String name,String desc){
this.name = name;
this.desc = desc;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name + ":" + desc;
}
}
枚举也可以实现接口:
package com.an.testenum;
/*
* 枚举也可以实现接口
*/
public class TestEnum3 {
public static void main(String[] args) {
Gender m = Gender.MAN;
Gender w = Gender.WOMAN;
m.walk();
w.walk();
//输出
//男人走路
//女人走路
}
}
interface Walk{
void walk();
}
enum Gender implements Walk{
MAN{
@Override
public void walk() {
// TODO Auto-generated method stub
System.out.println("男人走路");
}
},WOMAN{
@Override
public void walk() {
// TODO Auto-generated method stub
System.out.println("女人走路");
}
};
@Override
public void walk() {
System.out.println("走路");
}
}
枚举内的一些元素可以看做为一个构造器。调用时可以想象一下