枚举
来源:互联网 发布:啤酒游戏优化软件 编辑:程序博客网 时间:2024/05/16 03:39
枚举
右键直接新建enum,枚举类也是一种特殊形式的java类;
***枚举类中声明的每一个枚举值代表枚举类的一个实例对象;
在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的;
枚举类也可以实现接口,或继承抽象类;
JDK5中扩展了switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型;
若枚举类只有一个枚举值,则可以当作单态设计模式使用;
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。
常用方法:
name(): 返回此枚举类型对应常量的字符串,在其枚举声明中对其进行声明;
ordinal(): 返回枚举常量的序数,其中初始量从0开始;
valueof(String name): 根据该枚举类型对应常量的字符串返回其对应的枚举类型值;
values(): 返回所有的枚举值;
注意: 枚举类中的枚举值要放到代码的首行;
技巧: 使用匿名内部类来完成枚举值与字符串之间的转换
***************************************************************************************************************
例1: 定义枚举及其原理
public class Student {
private String name;
private Grade grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
public class Grade {
private Grade(){}
public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
// 定义枚举: 原理如上 A,B,C,D,E代表着自身的一个个的实例对象(如上)
enum Grade{
A,B,C,D,E;
}
public class Demo {
@Test
public void test(){
Student s = new Student();
s.setName("冠希哥 ");
s.setGrade(Grade.A);
}
}
***************************************************************************************************************
例2: 定义枚举的构造方法 A 100~90 B 80~90 C 70~80 D 60~70 E 0~59
public class Student {
private String name;
private Grade grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
// 定义枚举的构造方法
public class Grade {
private String value;
private Grade(String value){
this.value = value;
}
public static Grade A = new Grade("100~90");
public static Grade B = new Grade("89~80");
public static Grade C = new Grade("79~70");
public static Grade D = new Grade("69~50");
public static Grade E = new Grade("59~0");
}
*/
// 使用枚举方式: 原理如上 注意: 枚举类中的枚举值要放到代码的首行;
enum Grade{
A("100~90"),B("89~80"),C("79~70"),D("69~50"),E("59~0");
private String value;
private Grade(String value){
this.value = value;
}
public String getValue(){
return value;
}
}
public class Demo {
@Test
public void test(){
Student s = new Student();
s.setName("冠希哥 ");
s.setGrade(Grade.A);
Grade g = s.getGrade();
String v = g.getValue();
Assert.assertEquals("100~90", v);
}
}
***************************************************************************************************************
例3: 定义枚举的抽象方法 A 100~90 优秀 B 89~80 良好 C 79~70 一般 D 69~60 及格 E 0~59 不及格
public class Student {
private String name;
private Grade grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
// 定义枚举的抽象方法
/*
public class Grade {
public abstract String toLocaleString();
private Grade(){}
// 匿名内部类方式实现中文转换的toLocaleString方法
public static Grade A = new Grade("100~90"){
public String toLocalString(){
return "优秀";
}};
// B.C.D.E均为如上方式,略
}
*/
// 使用枚举定义枚举的抽象方法: 与上面的代码完全相同
// A 100~90 B 80~90 C 70~80 D 60~70 E 0~59
enum Grade {
A("100~90") {
public String toLocaleString() {
return "优秀";
}},
B("80~90") {
public String toLocaleString() {
return "良好";
}},
C("70~80") {
public String toLocaleString() {
return "一般";
}},
D("60~70") {
public String toLocaleString() {
return "及格";
}},
E("0~59") {
public String toLocaleString() {
return "不及格";
}};
private String value;
private Grade(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public abstract String toLocaleString();
}
public class Demo {
@Test
public void test(){
Student s = new Student();
s.setName("冠希哥 ");
s.setGrade(Grade.A);
Grade g = s.getGrade();
String v = g.getValue();
Assert.assertEquals("100~90", v);
String localeValue = g.toLocaleString();
Assert.assertEquals("优秀", localeValue);
}
***************************************************************************************************************
例4: 定义星期天的枚举
public enum WeekDay {
MON {
public String toLocalString() {
return "星期一";
}},
TUE {
public String toLocalString() {
return "星期二";
}},
WED {
public String toLocalString() {
return "星期三";
}},
THU {
public String toLocalString() {
return "星期四";
}},
FRI {
public String toLocalString() {
return "星期五";
}},
SAT {
public String toLocalString() {
return "星期六";
}},
SUN {
public String toLocalString() {
return "星期日";
}};
public abstract String toLocalString();
}
public class Demo {
@Test
public void test(){
WeekDay wd = WeekDay.MON;
Assert.assertEquals("星期一", wd.toLocalString());
}
}
***************************************************************************************************************
// 枚举中常用的方法
//枚举中的常用方法:自定义的枚举类的爸爸是java.lang.Enum
@Test
public void test2(){
WeekDay wd = WeekDay.FRI;
String name = wd.name();//枚举类型对应的字符串名称
System.out.println(name);
String str = "MON";
WeekDay wd1 = WeekDay.valueOf(str);
System.out.println(wd1.toLocaleString());
WeekDay wd2 = WeekDay.SUN;
System.out.println(wd2.ordinal());
}
@Test
//特殊的属性values:返回所有的枚举值。API中看不到的
public void test3(){
WeekDay [] wds = WeekDay.values();
for(WeekDay wd:wds){
System.out.println(wd.name());
}
}
***************************************************************************************************************
右键直接新建enum,枚举类也是一种特殊形式的java类;
***枚举类中声明的每一个枚举值代表枚举类的一个实例对象;
在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的;
枚举类也可以实现接口,或继承抽象类;
JDK5中扩展了switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型;
若枚举类只有一个枚举值,则可以当作单态设计模式使用;
Java中声明的枚举类,均是java.lang.Enum类的孩子,它继承了Enum类的所有方法。
常用方法:
name(): 返回此枚举类型对应常量的字符串,在其枚举声明中对其进行声明;
ordinal(): 返回枚举常量的序数,其中初始量从0开始;
valueof(String name): 根据该枚举类型对应常量的字符串返回其对应的枚举类型值;
values(): 返回所有的枚举值;
注意: 枚举类中的枚举值要放到代码的首行;
技巧: 使用匿名内部类来完成枚举值与字符串之间的转换
***************************************************************************************************************
例1: 定义枚举及其原理
public class Student {
private String name;
private Grade grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
public class Grade {
private Grade(){}
public static Grade A = new Grade();
public static Grade B = new Grade();
public static Grade C = new Grade();
public static Grade D = new Grade();
public static Grade E = new Grade();
}
*/
// 定义枚举: 原理如上 A,B,C,D,E代表着自身的一个个的实例对象(如上)
enum Grade{
A,B,C,D,E;
}
public class Demo {
@Test
public void test(){
Student s = new Student();
s.setName("冠希哥 ");
s.setGrade(Grade.A);
}
}
***************************************************************************************************************
例2: 定义枚举的构造方法 A 100~90 B 80~90 C 70~80 D 60~70 E 0~59
public class Student {
private String name;
private Grade grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
/*
// 定义枚举的构造方法
public class Grade {
private String value;
private Grade(String value){
this.value = value;
}
public static Grade A = new Grade("100~90");
public static Grade B = new Grade("89~80");
public static Grade C = new Grade("79~70");
public static Grade D = new Grade("69~50");
public static Grade E = new Grade("59~0");
}
*/
// 使用枚举方式: 原理如上 注意: 枚举类中的枚举值要放到代码的首行;
enum Grade{
A("100~90"),B("89~80"),C("79~70"),D("69~50"),E("59~0");
private String value;
private Grade(String value){
this.value = value;
}
public String getValue(){
return value;
}
}
public class Demo {
@Test
public void test(){
Student s = new Student();
s.setName("冠希哥 ");
s.setGrade(Grade.A);
Grade g = s.getGrade();
String v = g.getValue();
Assert.assertEquals("100~90", v);
}
}
***************************************************************************************************************
例3: 定义枚举的抽象方法 A 100~90 优秀 B 89~80 良好 C 79~70 一般 D 69~60 及格 E 0~59 不及格
public class Student {
private String name;
private Grade grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
// 定义枚举的抽象方法
/*
public class Grade {
public abstract String toLocaleString();
private Grade(){}
// 匿名内部类方式实现中文转换的toLocaleString方法
public static Grade A = new Grade("100~90"){
public String toLocalString(){
return "优秀";
}};
// B.C.D.E均为如上方式,略
}
*/
// 使用枚举定义枚举的抽象方法: 与上面的代码完全相同
// A 100~90 B 80~90 C 70~80 D 60~70 E 0~59
enum Grade {
A("100~90") {
public String toLocaleString() {
return "优秀";
}},
B("80~90") {
public String toLocaleString() {
return "良好";
}},
C("70~80") {
public String toLocaleString() {
return "一般";
}},
D("60~70") {
public String toLocaleString() {
return "及格";
}},
E("0~59") {
public String toLocaleString() {
return "不及格";
}};
private String value;
private Grade(String value) {
this.value = value;
}
public String getValue() {
return value;
}
public abstract String toLocaleString();
}
public class Demo {
@Test
public void test(){
Student s = new Student();
s.setName("冠希哥 ");
s.setGrade(Grade.A);
Grade g = s.getGrade();
String v = g.getValue();
Assert.assertEquals("100~90", v);
String localeValue = g.toLocaleString();
Assert.assertEquals("优秀", localeValue);
}
***************************************************************************************************************
例4: 定义星期天的枚举
public enum WeekDay {
MON {
public String toLocalString() {
return "星期一";
}},
TUE {
public String toLocalString() {
return "星期二";
}},
WED {
public String toLocalString() {
return "星期三";
}},
THU {
public String toLocalString() {
return "星期四";
}},
FRI {
public String toLocalString() {
return "星期五";
}},
SAT {
public String toLocalString() {
return "星期六";
}},
SUN {
public String toLocalString() {
return "星期日";
}};
public abstract String toLocalString();
}
public class Demo {
@Test
public void test(){
WeekDay wd = WeekDay.MON;
Assert.assertEquals("星期一", wd.toLocalString());
}
}
***************************************************************************************************************
// 枚举中常用的方法
//枚举中的常用方法:自定义的枚举类的爸爸是java.lang.Enum
@Test
public void test2(){
WeekDay wd = WeekDay.FRI;
String name = wd.name();//枚举类型对应的字符串名称
System.out.println(name);
String str = "MON";
WeekDay wd1 = WeekDay.valueOf(str);
System.out.println(wd1.toLocaleString());
WeekDay wd2 = WeekDay.SUN;
System.out.println(wd2.ordinal());
}
@Test
//特殊的属性values:返回所有的枚举值。API中看不到的
public void test3(){
WeekDay [] wds = WeekDay.values();
for(WeekDay wd:wds){
System.out.println(wd.name());
}
}
***************************************************************************************************************
0 0
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- Linux下的Java卸载与安装
- php实例-set和get方法
- U-boot-2014.04移植到MINI2440(10) 移植nand flash保存环境变量、添加分区
- [flume]AvroRuntimeException: Excessively large list allocation request detected
- 黑马程序员java之面向对象封装与继承
- 枚举
- win7下怎么使用管理员权限运行命令
- 布局中文件中【控件间距参数详解以及单位选择】
- 浅谈批处理for命令中的变量扩展
- 反射
- 利用Disqus快速搭建评论系统
- python cookbook:第二章 字符串和文本
- usaco Party Lamps report
- Java线程状态图!