第一时间阅读最新文章

一、什么是枚举类
1.概念
枚举的意思就是一个一个地列举出来。
而枚举类就是起到了把对象一个一个列举出来的作用,枚举类是java5中提出的新概念,但是到现在也有很多人不懂这个枚举类,这些人也包括我,以下是我对枚举类的学习总结。
2.为什么会有枚举类
枚举类出现之前
列举对象一般都是使用static和final来实现的
package model;
public class Person{
    public static final Person a=new Person("a");
    public static final Person b=new Person("b");
    private String name;
    private Person(String name){
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
如果每次列举一个对象都要去创建一个staticfinal对象,这就很麻烦,所以枚举类就诞生了。
枚举类出现之后
package model;
/**
 * @author xxj
 * 枚举类
 */
public enum  EnumPerson {
    A("A"),B("B");
    private String name;
    EnumPerson(String name){
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
使用枚举类就不用再去一个个地敲static final了。
3.什么地方需要使用枚举类
- 在需要列举一下固定的对象。
 - 单例模式也可以使用。
 
4.使用枚举类的优缺点
优点
- 创建对象方便。省去了创建对象的代码,这些都已经是规定好的了。
 - 便于管理。全部静态对象都在枚举类中,直接在枚举类里修改即可。
 
缺点
- 需要有语法基础。
 - 初始化缓慢。静态区的数据是在类加载的时候,就会去创建的。
 
二、枚举类的使用
1.语法
- 需要将class换成enum。
 - 枚举类的成员不能使用修饰符。
 - 枚举类的成员后面可以直接接构造方法的参数。
 - 枚举类的构造方法不能是public。
 - 枚举类不能继承和被继承,但是可以实现接口。
 
2.代码
这就直接看上面的,枚举类出现之后的代码了。
三、枚举类的实现
1.原理
其实,枚举类跟普通的类是没有任何区别的,只不过编译器会自动地识别enum这个标识符,然后把它转换成一个class
2.枚举类的字节码
让我们看一下,我们刚刚编写的枚举类的字节码是怎么样的
public final enum model/EnumPerson extends java/lang/Enum {
  // compiled from: EnumPerson.java
  // access flags 0x4019
  public final static enum Lmodel/EnumPerson; A
  // access flags 0x4019
  public final static enum Lmodel/EnumPerson; B
通过idea的view->show bytecode就可以看到了
我这里就只截取了开头的一部分内容,可以看出这里默认继承了一个Enum类,而且还有final标识符,这就是为什么枚举类不能继承和被继承的原因了。
而我们创建的两个对象就自动改成了public final static···一长串标识符声明的对象,这不就跟在没有出现枚举类之前的代码差不多嘛。
四、总结
枚举类本质上和普通的class一样,只不过java帮我们做了封装。(跟语法糖的概念差不多)而,枚举类中的对象都是枚举类的实现。
在需要一开始就创建而且不会再改变的一系列对象时,就可以使用枚举类。
语法:
- 需要将class换成enum。
 - 枚举类的成员不能使用修饰符。
 - 枚举类的成员后面可以直接接构造方法的参数。
 - 枚举类的构造方法不能是public。
 - 枚举类不能继承和被继承,但是可以实现接口。
 
——————————————————————————————
你知道的越多,不知道的越多。
如果本文章内容有问题,请直接评论或者私信我。如果觉我得写的还不错的话,点个赞也是对我的支持哦
未经允许,不得转载!










