Java系列文章目录
第十章 Java 面向对象高级之枚举类枚举类目录
提示:以下是本篇文章正文内容,下面案例可供参考
面向对象高级之枚举类
一、枚举类的使用:
-
枚举类的理解:类的对象为有限个、确定的个数。就称此类为枚举类
-
当需要使用一组常量时,强烈建议使用枚举类
-
如果枚举类的对象只有一个,则建议使用单例模式的方式实现
二、如何自定义枚举类,有如下两种方式:
- JDK1.5之前,自定义枚举类
- JDK1.5,可以使用Enum关键字定义枚举类
三、Enum类的主要方法:
- values() 方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
- valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
- toString():返回当前枚举类对象常量的名称
四、Enum关键字定义的枚举类使用接口的情况
- 实现接口,在enum类中实现抽象方法
- 让枚举类的对象分别实现接口中的抽象方法
注意:
- 定义的枚举类类型默认继承于java.lang.Enum类,而不是java.lang.Object
**
代码举例:方式一(JDK1.5之前,自定义枚举类)
**
/*
方式一:JDK1.5之前,自定义枚举类
*/
public class EnumSelfDefined {
public static void main(String[] args) {
System.out.println("此JDK1.5之前,自定义的枚举类的所有对象如下");
ExpressStatus nonPayMent = ExpressStatus.NonPayMent;
System.out.println(nonPayMent.toString());
ExpressStatus checked = ExpressStatus.Checked;
System.out.println(checked);
ExpressStatus delivered = ExpressStatus.Delivered;
System.out.println(delivered);
ExpressStatus fulfilled = ExpressStatus.Fulfilled;
System.out.println(fulfilled);
ExpressStatus paid = ExpressStatus.Paid;
System.out.println(paid);
ExpressStatus aReturn = ExpressStatus.Return;
System.out.println(aReturn);
}
}
//JDK1.5之前,自定义枚举类方式
class ExpressStatus{
//1.声明ExpressStatus对象的属性为:private final
private final String statusInfo;
//2.私有化类的构造器,并给对象属性赋值
private ExpressStatus(String statusInfo){
this.statusInfo = statusInfo;
}
//3.提供当前枚举类的多个对象,且对象声明为:public Static final
public static final ExpressStatus NonPayMent= new ExpressStatus("未付款");
public static final ExpressStatus Paid= new ExpressStatus("已付款");
public static final ExpressStatus Delivered= new ExpressStatus("已发货");
public static final ExpressStatus Return= new ExpressStatus("退货中");
public static final ExpressStatus Checked= new ExpressStatus("已确认");
public static final ExpressStatus Fulfilled= new ExpressStatus("已配货");
//4.获取枚举类对象的属性,提供get()
public String getStatusInfo() {
return statusInfo;
}
//5.提供toString()
@Override
public String toString() {
return statusInfo;
}
}
**
代码举例:方式二(JDK1.5,使用Enum关键字定义枚举类)
**
/*
方式二:JDK1.5,使用Enum关键字定义枚举类
*/
public class EnumKeyWord {
public static void main(String[] args) {
System.out.println("此JDK1.5,Enum关键字定义枚举类的所有对象如下");
ExpressStatus1 nonPayMent = ExpressStatus1.NonPayMent;
//Enum类的主要方法:1.nonPayMent默认调用的toString()
System.out.println(nonPayMent);
ExpressStatus1 checked = ExpressStatus1.Checked;
System.out.println(checked);
ExpressStatus1 delivered = ExpressStatus1.Delivered;
System.out.println(delivered);
ExpressStatus1 fulfilled = ExpressStatus1.Fulfilled;
System.out.println(fulfilled);
ExpressStatus1 paid = ExpressStatus1.Paid;
System.out.println(paid);
ExpressStatus1 aReturn = ExpressStatus1.Return;
System.out.println(aReturn);
//验证Enum的父类是否是java.lang.Object
System.out.print("Enum的父类是:");
System.out.println(ExpressStatus1.class.getSuperclass());
//Enum类的主要方法:2.values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
System.out.println("使用values()方法,遍历所有的枚举值。");
ExpressStatus1[] values = ExpressStatus1.values();
for (int i = 0; i < values.length; i++) {
System.out.println(values[i]);
}
//Enum类的主要方法:3.valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。
//如不是枚举类对象的“名字”,会有运行时异常:IllegalArgumentException。
ExpressStatus1 p = ExpressStatus1.valueOf("Paid");
System.out.println(p);
// ExpressStatus1 p1 = ExpressStatus1.valueOf("Paid1");//报异常:IllegalArgumentException。
// System.out.println(p1);
}
}
//JDK1.5,使用Enum关键字定义枚举类
enum ExpressStatus1 implements info{
//1.提供当前枚举类的多个对象,且相比自定义枚举方式的对象声明为:public Static final均省略不写,new 枚举名均不写。
//格式如下:常量名(),...,常量名();
NonPayMent("未付款"){
//4.2.让枚举类的对象分别实现接口中的抽象方法
@Override
public void show() {
System.out.println("快递未付款");
}
},
Paid("已付款"){
@Override
public void show() {
System.out.println("快递已付款");
}
},
Delivered("已发货"){
@Override
public void show() {
System.out.println("快递已发货");
}
},
Return("退货中"){
@Override
public void show() {
System.out.println("快递正在退货");
}
},
Checked("已确认"){
@Override
public void show() {
System.out.println("快递已确认");
}
},
Fulfilled("已配货"){
@Override
public void show() {
System.out.println("快递已配货");
}
};
//2.声明ExpressStatus对象的属性为:private final
private final String statusInfo;
//3.私有化类的构造器,并给对象属性赋值
private ExpressStatus1(String statusInfo){
this.statusInfo = statusInfo;
}
//4.获取枚举类对象的属性,提供get()
public String getStatusInfo() {
return statusInfo;
}
// //4.1.实现接口,在enum类中实现抽象方法
// @Override
// public void show() {
// System.out.println("查看快递订单状态");
// }
}
interface info{
void show();
}
结束语
此文章仅于个人学习笔记。