对象个数固定且有限,可以一一列举出来
本质是private的构造方法,加上public static final 属性;
数据类型: enum 默认继承Enum
所以 public enum EnumTest 后面不能跟extends继承其他类
属性:
name 枚举对象的名字
ordinal 枚举对象的位置,类似index
常用方法:
valueOf() 通过给定的枚举名字获得枚举对象
values 获得全部枚举对象,返回一个数组
compareTo() 比较两个枚举对象
toString 没有final修饰,可以重写。
枚举也可以自己修改属性和方法
1.必须在第一行描述枚举的内容,内容与构造方法格式一致
2.构造方法必须为private
3.其他和普通类基本一样。
package enumTest; public enum EnumTest {//里面的成员都是EnumTest类型的变量,name()默认为Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Satday //必须在第一行描述内容,分号结尾 Sunday("SundayName",1,1),Monday("MondayName",22,2),Tuesday("TuesdayName",33,3),Wednesday("WednesdayName",44,4),Thursday("ThursdayName",55,5),Friday("FridayName",66,6),Satday; public String name; //Enum自身带name属性,private final String name;这个name是我自己定义的name,两个不是同一个东西。enum的自身的name是第一行里写的那些Sunday一类的,用.name()获得。 private int index; public int age; public String getName(){ return this.name; } private EnumTest(){ //这是默认的构造方法,两个构造方法都不加上的话,枚举内容默认为名字。加了这个是为了防止直接写名字(比如Satday)的内容失效。下面的那个构造方法,使得枚举内容也可以是:名字(name,age,index)格式。 } private EnumTest(String name, int age, int index){ //枚举的构造方法必须是private,可以方法重载 this.name = name; this.age = age; this.index = index; } }
package enumTest; public class EnumTestMain { public static void main(String[] args) { EnumTest sun = EnumTest.Sunday; System.out.println("sun = " + sun); EnumTest mon = EnumTest.valueOf("Monday");//valueOf可以根据枚举内对象的name返回对应的对象 System.out.println("mon.age = " + mon.age);//自定义属性age System.out.println("mon = " + mon.name());//Enum自带方法,返回对象名字 System.out.println("mon = " + mon.getName());//自定义方法,返回自定义的name,与Enum的没有发生冲突,自己定义的这个name虽然和Enum的name重名了,但是并没有互相影响 mon.name = "Monday修改后的name"; System.out.println("mon = " + mon.name());//Enum自带方法,返回对象名字(enum自带的name) System.out.println("mon = " + mon.getName());//自定义方法,返回自定义属性name System.out.println("-------------------------------");//values把enum内容变成数组返回 EnumTest[] eArr = EnumTest.values(); for(EnumTest e: eArr){ System.out.println(e.name()); } System.out.println("-------------------------------");//枚举可以用switch判断 switch(sun){ case Sunday: System.out.println("swtch 判断 sun = Sunday"); break; case Monday: System.out.println("swtch 判断 sun = Monday"); break; case Tuesday: System.out.println("swtch 判断 sun = Tuesday"); break; case Wednesday: System.out.println("swtch 判断 sun = Wednesday"); break; case Thursday: System.out.println("swtch 判断 sun = Thursday"); break; case Friday: System.out.println("swtch 判断 sun = Friday"); break; case Satday: System.out.println("swtch 判断 sun = Satday"); break; } } }