一、什么是枚举类
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。
- 枚举类不能继承和被继承,但是可以实现接口。
——————————————————————————————
你知道的越多,不知道的越多。
如果本文章内容有问题,请直接评论或者私信我。如果觉我得写的还不错的话,点个赞也是对我的支持哦
未经允许,不得转载!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END