一个类中的对象 认为个数有限且固定的 可以将每一个对象一一列举出来
即在枚举类中直接列举对象
JDK1.5版本后可以直接定义enum类型
我们自己定义的enum类型 直接默认继承Enum类(java.lang包)
我们自己定义的enum类型不能再extends继承其他类 但是可以implements实现
Enum类型
有两个属性
name——>枚举对象的名字
name()来获取name属性
ordinal——>枚举对象在类中罗列的顺序 类似于index 从0 开始
ordinal()获取序号
一些常用的方法
valueOf() 通过给定的name获取对应的枚举对象
values() (源码中没有 是在虚拟机加载的时候 执行程序前手动放里面的)
获取全部的枚举对象——>返回一个数组 Day[]
compareTo() 可以比较两个枚举对象 返回值是int
如 monday.compareTo(tuesday)—->返回值是负的
monday.compareTo(monday)—->返回值是0的
tuesday.compareTo(monday)—->返回值是正的
ToString() 由于这个方法没有用final修饰 可以重写(覆盖)
还有一些从Object继承过来的方法 但是都加了final修饰 不可修改
我们也可以在enum中描述自己的属性或方法
必须在enum类中第一行 描述一下枚举的样子 最后需要分号结束
可以定义自己的属性
类创建的过程中 就已经帮我们创建了枚举类型的对象(私有的构造方法)
若想创建枚举样子的对象 所以我们需要给枚举类型提供对应样子的构造方法 且构造方法只能用private修饰
方法可以重载
没有枚举类型前 是这样设计的:
package test_enum;public class MyDay {//描述星期 共七个//类似单例模式的想法//公有的静态常量作为属性//公有保证对象能调得到,不用再写一个方法 静态保证对象唯一 final保证对象不能随意修改public static final MyDay monday = new MyDay();public static final MyDay tuesday = new MyDay();public static final MyDay wednesday = new MyDay();public static final MyDay thursday = new MyDay();public static final MyDay friday = new MyDay();public static final MyDay saturday = new MyDay();public static final MyDay sunday = new MyDay();//构造方法私有 别人就不能创建对象了private MyDay(){}//一般属性 一般方法都可以随意设计}
有了枚举类型后:
package test_enum;public enum Day{//描述了七个当前类的对象monday,tuesday,wednesday,thursday,friday,saturday,sunday}
枚举类型中描述自己的属性或方法:
package test_enum;public enum Day{//描述了七个当前类的对象monday("星期一",1),tuesday,wednesday,thursday,friday,saturday,sunday;private String name;private int index;private Day(){}private Day(String name,int index){this.name = name;this.index = index;}public String getName(){return this.name;}public void setName(String name){this.name = name;}}
主方法:
package test_enum;public class RunMain {public static void main(String[] args){MyDay myDay = MyDay.monday;//因为属性是对象 所以需要对象来接受Day day = Day.monday;//enum定义的//Day 默认继承的是Object类//除了继承Object类的方法外 还有一些另外的方法 其默认继承的Enum类//我们自己定义的每一个enum类型 都会默认继承Enum类 间接继承Object类(Enum类中重写了Object类的方法)//所以不能再继承其他类Day[] days = Day.values();//获取全部枚举对象for(Day d:days){System.out.println(d.name()+"---"+d.ordinal());}Day day1= Day.valueOf("monday");//调用静态方法valueOf 通过name叫monday的 找到一个对象System.out.println(day1.name()+"---"+day.ordinal());}}
swiitch内部判断枚举的应用:
public static void main(String[] args){Scanner input = new Scanner(System.in);System.out.println("请输入一个星期中的英文单词:");String key = input.nextLine();Day day = Day.valueOf(key);switch (day){case monday:System.out.println("您输入的是星期一");break;case tuesday:System.out.println("您输入的是星期二");break;case wednesday:System.out.println("您输入的是星期三");break;case thursday:System.out.println("您输入的是星期四");break;case friday:System.out.println("您输入的是星期五");break;case saturday:System.out.println("您输入的是星期六");break;case sunday:System.out.println("您输入的是星期天");break;default:System.out.println("输入错误");}}
