接下来本章的重点来了,就是枚举;
枚举是什么?
Java中的枚举是一种特殊的类,不但可以添加字段,构造方法,普通方法,甚至可以添加main()方法,
为什么需要枚举?
一些方法在运行时,它需要的数据不能是任意的,而必须是一定范围内的值,此类问题在JDK5以前采用自定义带有枚举功能的类解决,Java5以后可以直接使用枚举予以解决。
JDK5新增的enum关键字用于定义一个枚举类。
枚举类也是一种特殊形式的Java类。
枚举类和普通类的区别:
使用enum定义的枚举类默认继承了java.lang.Enum类
枚举类的构造器只能使用private访问控制符
枚举类的所有实例必须在枚举类中显式列出(,分隔;结尾).列出的实例系统会自动添加publicstaticfinal修饰
JDK5中扩展了switch语句,它除了可以接收int,byte,char,short外,还可以接收一个枚举类型
若枚举只有一个成员,则可以作为一种单例模式的实现方式
//枚举类1(没有参数的构造方法) package com.hbsi.enum2; 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; } } enum Grade{ A,B,C,D,E;//无参数 } /*//手动实现枚举类代码 class Grade{ private Grade(){} public static final Grade A=new Grade(); public static final Grade B=new Grade(); public static final Grade C=new Grade(); public static final Grade D=new Grade(); public static final Grade E=new Grade(); }*/ 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰 枚举类的使用 private final 修饰的属性应该在构造器中为其赋值 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数 //有参数的枚举类 enum Grade{ A("100-90"),B("89-80"),C("79-70"),D("69-60"),E("59-0"); private String value; private Grade(String value){ this.value=value; } public String getValue() { return value; } } 枚举类3(使用内部类) enum Grade{ A("100-90") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "优"; } }, B("89-80") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "良"; } }, C("79-70") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "中"; } }, D("69-60") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "可"; } }, E("59-0") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "差"; } }; private String value; private Grade(String value){ this.value=value;定义构造方法,传参; } public String getValue() { return value;//获取value值 } public abstract String toLocalGrade();//定义抽象方法 } 获取各个等级对应的中文 A(“100-90”), 优 B(“89-80”), 好 C(“79-70”), 良好 D(“69-60”), 及格 E(“59-0”); 不及格
要求:学生的grade只能是a,b,c,d,e五个级别。可以给学生设置成绩,并可以输出学生成绩情况(优,良,中,可,差) package com.hbsi.enum4; 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; } } enum Grade{ A("100-90") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "优"; } }, B("89-80") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "良"; } }, C("79-70") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "中"; } }, D("69-60") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "可"; } }, E("59-0") { @Override public String toLocalGrade() { // TODO Auto-generated method stub return "差"; } }; private String value; private Grade(String value){ this.value=value; } public String getValue() { return value; } public abstract String toLocalGrade(); } package com.hbsi.enum4; public class Demo1 { /** * @param args */ public static void main(String[] args) { Student s=new Student(); s.setName("张三"); s.setGrade(Grade.A); String str=Grade.B.getValue(); String str1=Grade.B.toLocalGrade(); System.out.println(str+"...."+str1); } } 结果:: 89-80....良