Java中的枚举是一种类型,顾名思义:就是一个一个列举出来。所以它一般都是表示一个有限的集合类型,它是一种类型,在维基百科中给出的定义是:
在数学和计算机科学理论中,一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数。这两种类型经常(但不总是)重叠.。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY就是一个枚举。
// 季节类
public class season {
// 构造方法私有化,不能外部创建该对象
private season(){}
// 春天单例模式
public static final season spring = new season();
// 夏天单例模式
public static final season summer = new season();
// 秋天单例模式
public static final season autumn = new season();
// 冬天单例模式
public static final season winter = new season();
}
// 季节类
public enum season {
// 春天
spring,
// 夏天
summer,
// 秋天
autumn,
// 冬天
winter;
}
spring summer autumn winter
在枚举内部,将每个变量定义为单例的写法,并且重写了里面的toString方法, 写法就是更具里面的hashcode编码来判断hashcode的值,来返回对应的枚举变量的名称。
在枚举类,或者单例模式类里面的成员变量里面的hashcode值,是不会发生改变的,每次程序运行的值都是相同的:
com.huaijiuwang.test.season@4554617c com.huaijiuwang.test.season@74a14482 com.huaijiuwang.test.season@1540e19d com.huaijiuwang.test.season@677327b6
所以可以根据hashcode值来进行判断,判断条件满足返回对应变量名的字符串。
@Override
public String toString() {
// 将hashcode值转为10进制
// 春天 com.huaijiuwang.test.season@4554617c
int spring = Integer.parseInt("4554617c", 16);
// 夏天 com.huaijiuwang.test.season@74a14482
int summer = Integer.parseInt("74a14482", 16);
// 秋天 com.huaijiuwang.test.season@1540e19d
int autumn = Integer.parseInt("1540e19d", 16);
// 冬天 com.huaijiuwang.test.season@677327b6
int winter = Integer.parseInt("677327b6", 16);
if(spring == this.hashCode()){
return "输出内容春天";
}
if(summer == this.hashCode()){
return "输出内容夏天";
}
if(autumn == this.hashCode()){
return "输出内容秋天";
}
if(winter == this.hashCode()){
return "输出内容冬天";
}
return "null";
}
public class Test1{
public static void main(String[] args){
System.out.println(season.spring);
System.out.println(season.summer);
System.out.println(season.autumn);
System.out.println(season.winter);
}
}
输出内容春天 输出内容夏天 输出内容秋天 输出内容冬天
// 季节类
public class season {
// 定义变量,保存当前的实例名称
private String name;
// 构造方法私有化,不能外部创建该对象
private season(){}
// 有参构造方法,用来记录当前调用的对象名称
private season(String name){
this.name = name;
}
// 春天单例模式
public static final season spring = new season("输出内容春天");
// 夏天单例模式
public static final season summer = new season("输出内容夏天");
// 秋天单例模式
public static final season autumn = new season("输出内容秋天");
// 冬天单例模式
public static final season winter = new season("输出内容冬天");
@Override
public String toString() {
return this.name;
}
}
输出内容春天 输出内容夏天 输出内容秋天 输出内容冬天
// 季节类
public enum season {
// 春天
spring("春天"),
// 夏天
summer("夏天"),
// 秋天
autumn("秋天"),
// 冬天
winter("冬天");
// 记录季节成员变量
private String name;
// 私有构造方法
private season(){}
// 带参私有构造方法
private season(String name){
this.name = name;
}
}
spring summer autumn winter
// 季节类
public enum season {
// 春天
spring("春天"),
// 夏天
summer("夏天"),
// 秋天
autumn("秋天"),
// 冬天
winter("冬天");
// 记录季节成员变量
private String name;
// 私有构造方法
private season(){}
// 带参私有构造方法
private season(String name){
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
春天 夏天 秋天 冬天
在编写枚举类的时候,变量推荐全部使用大写的英文字母
// 季节类
public enum season {
// 春天
SPRING("春天"),
// 夏天
SUMMER("夏天"),
// 秋天
AUTUMN("秋天"),
// 冬天
WINTER("冬天");
// 记录季节成员变量
private String name;
// 私有构造方法
private season(){}
// 带参私有构造方法
private season(String name){
this.name = name;
}
@Override
public String toString() {
return this.name;
}
}
最后感谢各位的观看,博客发布者:怀旧。博客发布网站为:怀旧个人博客网,感谢各位支持。。。
评论
登录后才可以进行评论哦!