枚举类速通(java)

为什么有枚举类

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,这里会导致类的加载,在加载的时候,把 MONDAYTUESDAY 两个静态对象实例化了,并且只会实例化一次,然后所有 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,博客主要用来复习,有错的话,欢迎评论区暴打我

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值