定义一个枚举
public class enum Status{
SUCCESS(1,"成功"),
FAIL(2,"失败");
// 定义带参数的构造函数
Status(int code, String msg){
this.code = code;
this.msg = msg;
}
// 本来定义的私有变量,编译后自动会变成公有
private int code;
private String msg;
}
反编译查看
public final class T extends Enum
{
// 公有,final,静态的枚举名字
public static final T SUCCESS;
public static final T FAIL;
// 存放枚举对象的数组
private static final T ENUM$VALUES[];
// 静态块,类加载时候,自动实例化枚举实例SUCCESS、FAIL,并加入到一个枚举类型的ENUM$VALUES数组中
static
{
SUCCESS = new T(1, “成功”);
FAIL = new T(2, "失败");
ENUM$VALUES = (new T[] {
SUCCESS , FAIL
});
}
}
总结
1)自动生成Class T类,继承Enum类,final修饰,所以枚举类不能再被继承
2)所有定义的枚举实例都会映射成final静态成员变量,变量名就是枚举实例名SUCCESS、FAIL;调用System.out.println(Status.SUCCESS)打印成员变量名称SUCCESS
3)调用enum的静态方法Status.values(),实际上是返回ENUM$VALUES[] 中的数组地址
4)在静态块{}中,完成了静态变量SUCCESS、FAIL和静态数组ENUM$VALUES[]的初始化
5)枚举常用调用形式:Status.SUCCESS 就是返回了静态变量SUCCESS
6)在枚举中定义的成员变量code、value,特点如下
6.1)必须是非静态的;
static final SUCCESS = new T(1, “成功”); 仅静态引用指向枚举实例,而code和msg是new出来实例的非静态属性
6.2)建议定义code、value都使用final,否则枚举值是可以被修改的