作用:把各种情况列出来,附加一些信息;结合switch-case更加方便
举例:模拟四种网络状态
未使用枚举的情况
只写数字不知道是什么意思,可以给数字起个名字,让英文单词有意义
public class NetworkStatus {
public static final int NETWORK_OK = 0;//网络正常
public static final int NETWORK_LOW_SPEED = 1;//网速过慢
public static final int NETWORK_HIGH_PING = 2;//网络ping值过高
public static final int NETWORK_UNSTABLE = 3;//网络不稳定
}
//1.使用静态final属性,模拟C中的宏定义,来进行分类例举
int netStatus = (int)(Math.random() * 4);
switch(netStatus){
//case后的数字可以改为属性,通过值可以看到一些含义
//只写数字意义容易混淆
//不便之处:写状态信息冗余,量多时比较麻烦,因此使用枚举替代
case NetworkStatus.NETWORK_OK:
System.out.println("网络正常!");
break;
case NetworkStatus.NETWORK_LOW_SPEED:
System.out.println("网速过慢!");
break;
case NetworkStatus.NETWORK_HIGH_PING:
System.out.println("网络ping值过高!");
break;
case NetworkStatus.NETWORK_UNSTABLE:
System.out.println("网络不稳定!");
break;
}
使用枚举的情况
//建立枚举(enum关键字)
//可以用于编辑手册,有其他需要的信息和属性可以再加
public enum NetworkCode {
NETWORK_OK(0,"网络正常"),
NETWORK_LOW_SPEED(1,"网速过慢"),
NETWORK_HIGH_PING(2,"网络ping值过高"),
NETWORK_UNSTABLE(3,"网络不稳定"),
;
private int code;//错误编码
private String msg;//错误信息
NetworkCode(int code, String msg){
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
//导入静态包
import static com.chinasofti.xian.EnumTest.bean.NetworkCode.*;
//2.使用枚举,列出网络的各种状态
//
NetworkCode networkCode = NETWORK_HIGH_PING;
switch(networkCode){
//可以根据networkCode知道类型
case NETWORK_OK:
System.out.println("网络状态编码:" + NETWORK_OK.getCode() + ",错误信息:" + NETWORK_OK.getMsg());
break;
case NETWORK_LOW_SPEED:
System.out.println("网络状态编码:" + NETWORK_LOW_SPEED.getCode() + ",错误信息:" + NETWORK_LOW_SPEED.getMsg());
break;
case NETWORK_HIGH_PING:
System.out.println("网络状态编码:" + NETWORK_HIGH_PING.getCode() + ",错误信息:" + NETWORK_HIGH_PING.getMsg());
break;
case NETWORK_UNSTABLE:
System.out.println("网络状态编码:" + NETWORK_UNSTABLE.getCode() + ",错误信息:" + NETWORK_UNSTABLE.getMsg());
break;
}