Java--枚举和注解--枚举
-
package com.model.enumeration; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/2 14:34 * * 演示枚举的引出 */ public class EnumDemo01 { public static void main(String[] args) { Season spring = new Season("春天", "温暖"); Season summer = new Season("夏天", "温暖"); Season autumn = new Season("球天", "温暖"); Season winter = new Season("冬天", "温暖"); Season season = new Season("其他", "温暖"); // 枚举的值的个数是有限个的,但是我们设计的类可以有多个,这样是不符合实际 // 季节的个数只有三个,我们这里应该不能在出现其他的季节了, // 所以我们这里的设计不能使用类来实现了,只能使用枚举来完成 } } class Season{ private String name; private String desc; @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } public Season() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } public Season(String name, String desc) { this.name = name; this.desc = desc; } }
-
-
-
-
package com.model.enumeration; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/2 15:03 * * 演示枚举的使用:枚举的两种实现方式 */ public class EnumDemo02 { public static void main(String[] args) { //枚举的第一钟实现方式 System.out.println(SeasonEnumOne.SPRING.toString()); //枚举的第二钟实现方式的使用 System.out.println(SeasonEnumTwo.SPRING.getName()+"\t"+SeasonEnumTwo.SPRING.getDesc()); } } //枚举的实现方式 //1.自定义的枚举 class SeasonEnumOne{ private String name; private String desc; // 自定义枚举的实现过程 // 1.将构造器私有化,目的是防止直接new创建 // 2.去掉set方法,防止属性被修改 // 3.在类的内部创建固定的对象 // 4.优化,内部创建的类中加入final修饰符 private SeasonEnumOne(String name, String desc) { this.name = name; this.desc = desc; } @Override public String toString() { return "SeasonEnumOne{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } //定义了四个对象 public static final SeasonEnumOne SPRING=new SeasonEnumOne("春天", "温暖"); public static final SeasonEnumOne SUMMER=new SeasonEnumOne("夏天", "温暖"); public static final SeasonEnumOne AUTUMN=new SeasonEnumOne("秋天", "温暖"); public static final SeasonEnumOne WINTER=new SeasonEnumOne("冬天", "温暖"); public String getDesc() { return desc; } public String getName() { return name; } } //演示枚举的第二种实现方式:使用Enum关键字 enum SeasonEnumTwo{ /** * 枚举的实现过程: * 1.使用关键字enum修饰代替class * 2.定义常量要在enum类的最上方:SPRING("春天","温暖")等价于 public static final SeasonEnumOne SPRING=new SeasonEnumOne("春天", "温暖"); * 3.enum对象之间用 , 进行分割,不能用 ; 进行分割 * 4.enum常量写在enum的最上方 * 5.当我们们使用无参构造函数创建枚举常量是,可以省略小括号 * 6.当我们使用enum关键字创建的枚举类是,默认会继承一个Enum类,而且是一个final类,我们可以通过反编译 SeasonEnumTwo.class * 成 SeasonEnumTwo.java 来观察 (实用工具:javap)* * * */ SPRING("春天","温暖"), SUMMER("夏天","温暖"), AUTUMN("秋天","温暖"), WINTER("冬天","温暖"), OTHER;//省略小括号 private String name; private String desc; SeasonEnumTwo() { } private SeasonEnumTwo(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } @Override public String toString() { return "SeasonEnumTwo{" + "name='" + name + '\'' + ", desc='" + desc + '\'' + '}'; } public String getDesc() { return desc; } }
-
枚举的课堂练习
-
Enum成员方法:
-
package com.model.enumeration; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/2 15:19 * * 演示Enum常用方法的使用 */ public class EnumDemo03 { public static void main(String[] args) { Person one = Person.ONE; // 1.获取枚举常量的名字 System.out.println(one.name()); // 2.输出的枚举常量的次序\编号,从0开始编号 System.out.println(one.ordinal()); // 3.从反编译可以看出这个方法是隐藏的,返回一个数组,数组中含有所有的枚举对象 for (Person o:Person.values()){ System.out.println(o); } // 4.查找类中的枚举常量是否有ONE.如果有就返回枚举常量,如果没有就会报错 Person one1 = Person.valueOf("ONE"); System.out.println("one1:"+one1); System.out.println(one==one1); // 5.就是比较两个枚举常量的编号, return self.ordinal - other.ordinal; ,用one的编号-two的编号 Person two = Person.TWO; System.out.println(one.compareTo(two)); //-1 // 6.如果在枚举类没有重写toString()就返回对象名,在子类中重写后输出枚举常量的属性 System.out.println(one.toString()); } } enum Person{ // 枚举的成员方法设置get方法,不要设置set方法,因为枚举的数值应该是固定的几种,枚举常量的之固定 // 枚举常量放在最上面,枚举常量使用构造方法创建的final类型的常量(简写版),使用无参构造函数是可以称略() // 默认的构造器为私有化 // 多个枚举常量以,进行分割 // enum修饰的类,会继承了Enum,且别final修饰 // ONE("zzh",20),TWO("a",18),THREE("张紫韩",18),FOUR("b",18); private String name; private int age; Person() { } Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } public String getName() { return name; } public int getAge() { return age; } }
- Enum课堂练习
-
package com.model.enumeration; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/2 18:37 */ public class EnumDemo04 { public static void main(String[] args) { Day[] values = Day.values(); //values()的到所有的枚举常量 for (Day day:values){ System.out.println(day.getName()); } } } enum Day{ ONE("星期一"), TWO("星期二"), THREE("星期三"), FOUR("星期四"), FIVE("星期五"), SIX("星期六"), SEVEN("星期日"); private String name; @Override public String toString() { return "Day{" + "name='" + name + '\'' + '}'; } Day(String name) { this.name = name; } public String getName() { return name; } }
-
-
Enum使用细节:
-
package com.model.enumeration; /** * @Description:测试类 * @Author: 张紫韩 * @Crete 2021/7/2 20:47 * 演示Enum使用细节 */ public class EnumDemo05 { public static void main(String[] args) { Music.MUSIC.play(); } } interface Play{ //定义接口 public void play(); } enum Music implements Play{//隐藏的继承了Enum类,并且java时单继承,所以不能在继承类了,但是可以实现接口 MUSIC; @Override //实现了接口,并且实现接口中的方法 public void play() { System.out.println("播放音乐"); } }