为什么有枚举类
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
}
}
class Week {
private String name;
private Week(String name) {
this.name = name;
}
private static Week MONDAY = new Week("星期一");
private static Week TUESDAY = new Week("星期二")
}
Week 类中 构造器是私有的,不能在外部实例化对象。 所以直接在类内部,创建两个 static 对象。然后我们再回到 main中,Week.MONDAY,这里会导致类的加载,在加载的时候,把 MONDAY 和 TUESDAY 两个静态对象实例化了,并且只会实例化一次,然后所有 Week 类对象共享,因为类只会加载一次,他们是静态的,所有类共享
我们可以简化,以上的东西,用枚举类的语法
枚举类
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
}
}
enum Week {
MONDAY("星期一"),TUESDAY("星期二");
private String name;
private Week(String name) {
this.name = name;
}
}
上面就是把类名换成了enum ,然后 Week 类中两个静态类,直接简写成 MONDAY(“星期一”) 这种形式,不过 原理 还是 private static Week MONDAY = new Week(“星期一”);
这里要注意简写后只能 放在类的最上面
枚举类还隐式的继承了一个 Enum 类
这个Enum 类里面有很多方法,下面 一 一 列举
1. toString
它是返回枚举对象的名字,我们一般在 enum 类中重写它,返回对象的信息
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
System.out.println(monday.toString());
}
}
enum Week {
MONDAY("星期一"),TUESDAY("星期二");
private String name;
private Week(String name) {
this.name = name;
}
}
2.name
返回枚举对象名字
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
System.out.println(monday.name()); //name 在这里
}
}
enum Week {
MONDAY("星期一"),TUESDAY("星期二");
private String name;
private Week(String name) {
this.name = name;
}
}
3. ordinal
返回当前位置的位置号,下标从 0 开始
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
System.out.println(monday.ordinal()); //name 在这里
}
}
enum Week {
MONDAY("星期一"),TUESDAY("星期二");
private String name;
private Week(String name) {
this.name = name;
}
}
4. valueof
将字符串,转化成对象,如果字符串和枚举类对象的名字不一样,那就报错
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
Week monday2 = monday.valueOf("mon");
}
}
enum Week {
MONDAY("星期一"),TUESDAY("星期二");
private String name;
private Week(String name) {
this.name = name;
}
}
这里,Week类里都没有 mon 这个对象,所以报错了
5. compareTo
两个对象编号做减法
public class Main {
public void main(String[] args) {
Week monday = Week.MONDAY;
Week tuesday = Week.TUESDAY;
System.out.println(monday.compareTo(tuesday));
}
}
enum Week {
MONDAY("星期一"),TUESDAY("星期二");
private String name;
private Week(String name) {
this.name = name;
}
}
monday 的编号是 0, tuesday 的编号是 1 所以 0 - 1 是 -1
一只大一牛马,初学java,博客主要用来复习,有错的话,欢迎评论区暴打我