Java面向对象编程高级-枚举类(四)
Java面向对象编程高级-枚举类(四)
- 一、概述
- 二、JDK5.0和JDK5.0之前如何定义枚举类
- 1、JDK5.0之前代码演示
- 2、JDK5.0代码演示(常用)
- 三、练习
一、概述
枚举类型本质上也是一种类,只不过是这个类的对象是有限的、固定的几个,不能让用户随意创建。
枚举类的例子举不胜举:
星期: Monday(星期-)…Sunday(星期天)
性别:Man(男)、Woman(女)
月份:January(1月)…December(12月)
季节:Spring(春节)…Winter(冬天)
三原色:red(红色)、green(绿色)、blue(蓝色)
支付方式:Cash(现金)、WechatPay(微信)、Alipay(支付宝)、BankCard(银行卡)
就职状态:Busy(忙碌)、Free(空闲)、Vocation(休假)、Dimission(离职)
线程状态:创建、就绪、运行、阻塞、死亡
2、开发中的建议
开发中如果针对于某个类,其实例是确定个数的,则推荐将此类声明为枚举类。
如果枚举类中的实例只有1个,可以看作是单例的实现方式。
二、JDK5.0和JDK5.0之前如何定义枚举类
1、JDK5.0之前代码演示
package com._enum;public class SeasonTest {public static void main(String[] args) {System.out.println(Season.SUMMER);}
}class Season {//2、声明实例变量 使用private final 修饰private final String Name;private final String Desc;//1、私有化类的构造器private Season(String Name, String Desc) {this.Name = Name;this.Desc = Desc;}//3、提供实例变量的get方法public String getName() {return Name;}public String getDesc() {return Desc;}//创建实例对象 使用public static final 修饰public static final Season SPRING = new Season("春天", "春暖花开");public static final Season SUMMER = new Season("夏天", "夏日炎炎");public static final Season AUTOMN = new Season("秋天", "硕果累累");public static final Season WINTER = new Season("冬天", "白雪皑皑");@Overridepublic String toString() {return "Season{" +"Name='" + Name + '\'' +", Desc='" + Desc + '\'' +'}';}
}
2、JDK5.0代码演示(常用)
Enum中常用方法
使用enum关键字定义的枚举类,默认其父类是java.lang.Enum类
使用enum关键字定义的枚举类,不要再显示的定义其父类,否则会报错。
String tostring():默认返回的是常量名(对象名),可以继续手动重写该方法
static 枚举类型[] values():返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值,是一个静态方法
static 枚举类型 valueOf(string name):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象
String name():得到当前枚举常量的名称。建议优先使用tostring()。
int ordinal():返回当前枚举常量的次序号,默认从0开始
package com._enum;public class SeasonTest1 {public static void main(String[] args) {System.out.println(Searon1.SPRING.getName());System.out.println(Searon1.SPRING);System.out.println(Searon1.SPRING.name());Searon1[] values = Searon1.values();for (int i = 0; i < values.length; i++) {System.out.println(values[i]);}//4、.valueOf(objName);返回当前枚举类中名称为objName的枚举类对象//如果枚举类中不存在ibjName则报错String objName = "WINTER";Searon1 searon1 = Searon1.valueOf(objName);System.out.println(searon1);}
}//jdk5.0 使用enum关键字定义枚举类
enum Searon1 {//1、必须在枚举类的开始声明多个对象,对象之间使用,隔开SPRING("春天", "春暖花开"),SUMMER("夏天", "夏日炎炎"),AUTOMN("秋天", "硕果累累"),WINTER("冬天", "白雪皑皑");//2、声明实例变量 使用private final 修饰private final String Name;private final String Desc;//3、私有化类的构造器private Searon1(String Name, String Desc) {this.Name = Name;this.Desc = Desc;}//3、提供实例变量的get方法public String getName() {return Name;}public String getDesc() {return Desc;}@Overridepublic String toString() {return "Searon1{" +"Name='" + Name + '\'' +", Desc='" + Desc + '\'' +'}';}
}
三、练习
案例1
package com._enum.apply;public class Employee {private String name;private int age;private Status status;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Status getStatus() {return status;}public void setStatus(Status status) {this.status = status;}public Employee() {}public Employee(String name, int age, Status status) {this.name = name;this.age = age;this.status = status;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", age=" + age +", status=" + status +'}';}
}
package com._enum.apply;public enum Status {BUSY, FREE, VOCATION, DIMISSION;
}
package com._enum.apply;public class EmployeeTest {public static void main(String[] args) {Employee e1 = new Employee("tom",21,Status.BUSY);System.out.println(e1);}}Employee{name='tom', age=21, status=BUSY}
案例2:颜色枚举类Color(使用enum声明)
1、声明颜色牧举类:7个常量对象:RED,ORANGE,YELLOW,GREEN,CYAN, BLUE,PURPLE;
2、在测试类中,使用枚举类,获取绿色对象,并打印对象。
public enum Color {REB, ORANGE, YELLOW, GREEN, CYAN, BLUE, PURPLE;
}
案例拓展:颜色枚举类(使用enum声明)
(1)声明颜色枚举类Color:
声明final修饰的int类型的属性red,green,blue
声明final修饰的String类型的属性description
声明有参构造器Color(int red,int green,int blue,String description)
创建7个常量对象:红、橙、黄、绿、青、蓝、紫,
重写tostring方法,例如:RED(255,0,0)->红色
(2)在测试类中,使用枚举类,获取绿色对象,并打印对象、
提示:
7个常量对象的RGB值如下:
红:(255,0,0)
橙:(255,128,0)
黄:(255,255,0)
绿:(日,255,0)
青:(0,255,255)
蓝:(0,0,255)
茶:(128,0 255)
package com._enum;/*** package:com._enum** @Author jimmy-yan* @Create 2024/11/4 14:05*/
public class ColorTest {public static void main(String[] args) {System.out.println(Color.GREEN);}
}enum Color {RED(255, 0, 0, "红色"),YELLOW(255, 0, 0, "黄色"),GREEN(0, 255, 0, "绿色"),BLUE(255, 0, 0, "蓝色");private final int red;private final int green;private final int blue;private final String desc;public int getRed() {return red;}public int getGreen() {return green;}public int getBlue() {return blue;}public String getDesc() {return desc;}Color(int red, int green, int blue, String desc) {this.red = red;this.green = green;this.blue = blue;this.desc = desc;}@Overridepublic String toString() {return name()+"("+red+","+green+","+blue+")->"+desc;}
}