枚举
学枚举之前先想一个问题:
现有一个需求是只能创建一个对象,意思也是说地址要一样如何去编写?
public static void main(String[] args) {
//需求只能创建一个对象
System.out.println(Day.d);
System.out.println(Day.d.d);
}
public class Day {
//需求只能创建一个对象
public static Day d=new Day();
}
输出:
com.hp.jj.Day@15db9742
com.hp.jj.Day@15db9742
那么如果我要创建多个对象了
public static void main(String[] args) {
//需要创建5个对象时候
System.out.println(Day.d1);
System.out.println(Day.d2);
System.out.println(Day.d3);
System.out.println(Day.d4);
System.out.println(Day.d5);
}
public class Day {
//需要创建5个对象时候
public static Day d1=new Day();
public static Day d2=new Day();
public static Day d3=new Day();
public static Day d4=new Day();
public static Day d5=new Day();
}
输出:
com.hp.jj.Day@6d06d69c
com.hp.jj.Day@7852e922
com.hp.jj.Day@4e25154f
com.hp.jj.Day@70dea4e
com.hp.jj.Day@5c647e05
enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。
里面都是多个对象
在Java中,被 enum 关键字修饰的类型就是枚举类型。形式如下:
enum Week{
MONDAY , TUESDAY,WEDNESDAY , THURDAY , FRIDAY ,SATURDAY,SUNDAY ;
//相对应
如果枚举不添加任何方法,枚举值默认为从0开始的有序数值。以 Week 枚举类型举例,它的枚举常量依次为
MONDAY:0,TUESDAY:1,WEDNESDAY:2, THURDAY:3, FRIDAY:4,SATURDAY:5,SUNDAY:6 ;
}
枚举的方法
在enum中,提供了一些基本方法:
name():返回实例名。
ordinal():返回实例声明时的次序,从0开始。
equals() :判断是否为同一个对象。
compareTo():两个枚举的索引差值
此外,java.lang.Enum实现了Comparable和 Serializable 接口,所以也提供 compareTo() 方法。
System.out.println(Week.SATURDAY.ordinal()); //5
System.out.println(Week.MONDAY.name()); //MONDAY
System.out.println(Week.MONDAY.equals(Week.MONDAY)); //true
System.out.println(Week.SUNDAY.compareTo(Week.TUESDAY)); //
输出结果:
5
MONDAY
true
5
枚举的特性
枚举可以添加属性
public enum Week {
private static String week="";
private int id;
public static String getWeek() {
return week;
}
public static void setWeek(String week) {
Week.week = week;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
public static void main(String[] args) {
Week.TUESDAY.setId(4);
System.out.println(Week.TUESDAY.getId())
}
输出结果:
4
枚举可以添加方法
Java 不允许使用 = 为枚举常量赋值
默认继承了java.lang.Enum类
枚举可以实现接口,但是不能继承
构造函数必须是私有的
枚举可以添加普通方法、静态方法、抽象方法、构造方法
public enum Week implements Myinterface {
//构造函数
private Week(){
}
private Week(String name,int id){
this.id=id;
System.out.println(name+id);
}
//方法
@Override
public void eat() {
System.out.println("11111");
}
public static void sleep(){
System.out.println("睡觉");
}
}