精华内容
下载资源
问答
  • 枚举类

    2019-09-10 17:22:30
    枚举类概念枚举类与普通类的区别枚举类含有的方法枚举类含有的成员枚举类含有抽象方法枚举类实现接口 概念 用于代表“实例已经固定”的类,而且定义时就必须在【第一行】创建、并列出来。 [修饰符] enum 枚举名 { //...

    概念

    用于代表“实例已经固定”的类,而且定义时就必须在【第一行】创建、并列出来。

    [修饰符] enum 枚举名
    {
    //立即在第一行列出枚举的实例
    }

    枚举类与普通类的区别

    • 枚举类可以实现一个或多个接口,使用enum定义的枚举类默认继承了Java.lang.Eunm类,而不是直接继承Java.lang.Object类
    • 使用enum定义、非抽象的枚举类默认会使用final修饰,因此枚举类不能派生子类。
    • 枚举类的构造器只能使用private修饰。
    • 枚举类的所有实例必须在枚举类的第一行显式指出;列出的实例,系统会自动添加 public static final修饰

    枚举类含有的方法

    • 所有枚举类都含有values()方法,可以遍历所有枚举值。
    • 如果枚举类里已经含有抽象方法,该枚举类默认含有abstract修饰,此时该枚举类没有final修饰。

    枚举类含有的成员

    • 实例(必须在第一行显式指出)
      ★列出枚举值,并不是简单定义几个枚举值的变量名
      而是调用枚举类的构造器来创建相应的实例。
    • 成员变量
    • 方法
    • 构造器(只能用private修饰)
    • 初始化块
    • 内部类(很少使用)

    ★有了枚举以后,它的实例已经创建出来了,直接使用即可。

    枚举类含有抽象方法

    • 在创建枚举值,要将抽象方法重写

    枚举类实现接口

    • 实现接口,并直接实现所有的抽象方法。
      此时枚举类就不再是抽象枚举了。
    • 实现接口,但并不直接实现抽象方法。
      则需要在每个枚举值里分别实现抽象方法。
    展开全文
  • java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
  • 一、枚举类的概述 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类 2.当需要定义一组常量时,强烈建议使用枚举类 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式。 二、枚举类中的常用...

    一、枚举类的概述

    • 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
    • 2.当需要定义一组常量时,强烈建议使用枚举类
    • 3.如果枚举类中只一个对象,则可以作为单例模式的实现方式。

    二、枚举类中的常用方法

    • values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
    • valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
    • toString():返回当前枚举类对象常量的名称

    三、自定义枚举类

    • 构造器私有化 (固定值, 所以不允许外界在创建对象)
    • 对外暴露类中创建的对象(public static final修饰的, 实现底层优化)
    • 只提供get方法, 不提供set方法 (因为枚举对象值通常为只读)
    /**
     * 一、枚举类的使用
     * 1.枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类
     * 2.当需要定义一组常量时,强烈建议使用枚举类
     * 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。
     *
     * 二、如何定义枚举类
     * 方式一:jdk5.0之前,自定义枚举类
     * 方式二:jdk5.0,可以使用enum关键字定义枚举类
     *
     * 三、Enum类中的常用方法:
     *    values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。
     *    valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。
     *    toString():返回当前枚举类对象常量的名称
     *
     * 四、使用enum关键字定义的枚举类实现接口的情况
     *   情况一:实现接口,在enum类中实现抽象方法
     *   情况二:让枚举类的对象分别实现接口中的抽象方法
     */
    public class SeasonTest {
    
        public static void main(String[] args) {
            Season spring = Season.SPRING;
            System.out.println(spring);
    
        }
    
    }
    //自定义枚举类
    class Season{
        //1.声明Season对象的属性:private final修饰
        private final String seasonName;
        private final String seasonDesc;
    
        //2.私有化类的构造器,并给对象属性赋值
        private Season(String seasonName,String seasonDesc){
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        //3.提供当前枚举类的多个对象:public static final的
        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("冬天","冰天雪地");
    
        //4.其他诉求1:获取枚举类对象的属性
        public String getSeasonName() {
            return seasonName;
        }
    
        public String getSeasonDesc() {
            return seasonDesc;
        }
        //4.其他诉求1:提供toString()
        @Override
        public String toString() {
            return "Season{" +
                    "seasonName='" + seasonName + '\'' +
                    ", seasonDesc='" + seasonDesc + '\'' +
                    '}';
        }
    }
    

    使用enum来创建枚举类

    • 当我们使用 enum 关键字开发一个枚举类时,默认会继承 Enum 类, 而且是一个 final 类[如何证明], 使用 javap 工具来演示
    • 传统的 public static final Season2 SPRING = new Season2(“春天”, “温暖”); 简化成 SPRING(“春天”, “温暖”), 这里必须知道,它调用的是哪个构造器.
    • 如果使用无参构造器 创建 枚举对象,则实参列表和小括号都可以省略
    • 当有多个枚举对象时,使用,间隔,最后有一个分号结尾
    • 枚举对象必须放在枚举类的行首.
    /**
     * 使用enum关键字定义枚举类
     * 说明:定义的枚举类默认继承于java.lang.Enum类
     */
    public class SeasonTest1 {
        public static void main(String[] args) {
            Season1 summer = Season1.SUMMER;
            //toString():返回枚举类对象的名称
            System.out.println(summer.toString());
    
    //        System.out.println(Season1.class.getSuperclass());
            System.out.println("****************");
            //values():返回所有的枚举类对象构成的数组
            Season1[] values = Season1.values();
            for(int i = 0;i < values.length;i++){
                System.out.println(values[i]);
                values[i].show();
            }
            System.out.println("****************");
            Thread.State[] values1 = Thread.State.values();
            for (int i = 0; i < values1.length; i++) {
                System.out.println(values1[i]);
            }
    
            //valueOf(String objName):返回枚举类中对象名是objName的对象。
            Season1 winter = Season1.valueOf("WINTER");
            //如果没有objName的枚举类对象,则抛异常:IllegalArgumentException
    //        Season1 winter = Season1.valueOf("WINTER1");
            System.out.println(winter);
            winter.show();
        }
    }
    
    interface Info{
        void show();
    }
    
    //使用enum关键字枚举类
    enum Season1 implements Info{
        //1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束
        SPRING("春天","春暖花开"){
            @Override
            public void show() {
                System.out.println("春天在哪里?");
            }
        },
        SUMMER("夏天","夏日炎炎"){
            @Override
            public void show() {
                System.out.println("宁夏");
            }
        },
        AUTUMN("秋天","秋高气爽"){
            @Override
            public void show() {
                System.out.println("秋天不回来");
            }
        },
        WINTER("冬天","冰天雪地"){
            @Override
            public void show() {
                System.out.println("大约在冬季");
            }
        };
    
        //2.声明Season对象的属性:private final修饰
        private final String seasonName;
        private final String seasonDesc;
    
        //2.私有化类的构造器,并给对象属性赋值
    
        private Season1(String seasonName,String seasonDesc){
            this.seasonName = seasonName;
            this.seasonDesc = seasonDesc;
        }
    
        //4.其他诉求1:获取枚举类对象的属性
        public String getSeasonName() {
            return seasonName;
        }
    
        public String getSeasonDesc() {
            return seasonDesc;
        }
    //    //4.其他诉求1:提供toString()
    //
    //    @Override
    //    public String toString() {
    //        return "Season1{" +
    //                "seasonName='" + seasonName + '\'' +
    //                ", seasonDesc='" + seasonDesc + '\'' +
    //                '}';
    //    }
    
    
    //    @Override
    //    public void show() {
    //        System.out.println("这是一个季节");
    //    }
    }
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,455
精华内容 14,582
关键字:

枚举类