zoukankan      html  css  js  c++  java
  • java枚举类

    enum关键字用于定义枚举类,若枚举只有一个成员, 则可以作为一种单例模式的实现方式。

     
    枚举类对象的属性不应允许被改动, 所以应该使用 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;
        }
    }
  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/xujiming/p/4638494.html
Copyright © 2011-2022 走看看