原文 http://www.cnblogs.com/xujiming/p/4638494.html
枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。
枚举类的使用 private final 修饰的属性应该在构造器中为其赋值。
若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数。
必须在枚举类的第一行声明枚举类对象。
枚举类和普通类的区别:
1.使用 enum 定义的枚举类默认继承了 java.lang.Enum 类
2.枚举类的构造器只能使用 private 访问控制符
3.枚举类的所有实例必须在枚举类中显式列出(以,分隔 以; 结尾). 列出的实例系统会自动添加 public static final 修饰
JDK1.5之前需要自定义枚举类: - /*枚举类的自定义方式*/
- public class TestSeason {
- public static void main(String[] args){
- Season spring=Season.SPRING;
- System.out.println(spring);
- System.out.println(spring.getSeasonName());
- }
- }
- //枚举类
- class Season{
- //1.提供类的属性,声明为private final
- private final String seasonName;
- private final String seasonDesc;
- //2.声明为final的属性,在构造器中初始化
- private Season(String seasonName,String seasonDesc){
- this.seasonName=seasonName;
- this.seasonDesc=seasonDesc;
- }
- public static final Season SPRING=new Season("spring","春暖花开");
- public static final Season SUMMER=new Season("summer","夏日炎炎");
- public static final Season AUTOMN=new Season("automn","秋高气爽");
- public static final Season WINTER=new Season("winter","白雪皑皑");
- //通过公共的方法来调用属性
- public String getSeasonName() {
- return seasonName;
- }
- public String getSeasonDesc() {
- return seasonDesc;
- }
- @Override
- public String toString() {
- return "Season [seasonName=" + seasonName + ", seasonDesc="
- + seasonDesc + "]";
- }
- }
复制代码
JDK 1.5 新增的 enum 关键字用于定义枚举类:
枚举类的主要方法:
1.values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
2.valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。
若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式, 则可以让每个枚举值分别来实现该方法 - /*
- * 一.枚举类
- * 1.如何自定义枚举类
- * 2.如何使用enum关键字定义枚举类
- * 常用的方法;values(),valueOf(String str)
- * 如何使枚举类实现接口:可以让不同的枚举类的对象调用被重写的抽象方法,执行的效果不同(相当于每个对象重写抽象方法)
- * */
- public class TestSeason1{
- public static void main(String[] args){
- SeasonEnum spring=SeasonEnum.SPRING;
- System.out.println(spring);
- System.out.println(spring.getSeasonName());
- //1.values方法可以返回枚举类型的对象数组,可以方便遍历所有的枚举值
- SeasonEnum[] seasons=SeasonEnum.values();
- for(int i=0;i<seasons.length;i++){
- System.out.println(seasons[i]);
- }
- //2.valueOf方法可以把一个字符串转为对应的枚举类对象,要求字符串必须是枚举类对象的“名字”
- String str="WINTER";
- SeasonEnum sea=SeasonEnum.valueOf(str);
- System.out.println(sea);
- //不同的枚举类对象调用重写的show方法得到不同的效果
- spring.show();
- sea.show();
- }
- }
- //接口
- interface Info{
- public void show();
- }
- //实现接口的枚举类
- enum SeasonEnum implements Info{
- //必须在枚举类的第一行声明枚举类对象
- SPRING("spring","春暖花开"){
- public void show(){
- System.out.println("春天在哪里");
- }
- },
- SUMMER("summer","夏日炎炎"){
- public void show(){
- System.out.println("生如夏花");
- }
- },
- AUTOMN("autumn","秋高气爽"){
- public void show(){
- System.out.println("金色的秋天");
- }
- },
- WINTER("winter","白雪皑皑"){
- public void show(){
- System.out.println("冬天里的一把火");
- }
- };
- private final String seasonName;
- private final String seasonDesc;
- private SeasonEnum(String seasonName, String seasonDesc) {
- this.seasonName = seasonName;
- this.seasonDesc = seasonDesc;
- }
- public String getSeasonName() {
- return seasonName;
- }
- public String getSeasonDesc() {
- return seasonDesc;
- }
- }
复制代码
|