zoukankan      html  css  js  c++  java
  • Java枚举enum关键字

    枚举的理解

    枚举其实就是一个类,枚举类的实例是一组限定的对象

    传统的方式创建枚举 【了解】

    对比:单例类

    1、构造器私有化
    2、本类内部创建对象
    3、通过public static方法,对外暴露该对象

    枚举类

    1、构造器私有化
    2、本类内部创建一组对象,添加public static修饰符,直接暴露对象

    /**
     * 此类用于演示使用传统的方式创建枚举
     * 步骤
     *    1、构造器私有化    
        2、本类内部创建一组对象,添加public static final修饰符,直接暴露对象
     */
    public class TestEnum1 {
        public static void main(String[] args) {
            //引用枚举类的对象        
            System.out.println(Season.SPRING);
            System.out.println(Season.SUMMER);
    }//简单示例2:提供有参构造
    class Season{
        private String name;//季节名称
        private String description;//季节描述
        //2.本类内部创建一组对象,添加public static修饰符,直接暴露对象
        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("冬天","千树万树梨花开");
        
        //1、构造器私有化    
        private Season(String name, String description) {
            super();
            this.name = name;
            this.description = description;
        }
        public String getName() {
            return name;
        }
        
        public String getDescription() {
            return description;
        }
    @Override
    public String toString() { return "Season [name=" + name + ", description=" + description + "]"; } }

    使用enum关键字定义枚举掌握

    引入:jdk5.0出现的新特性

    【特点】

    1、使用enum关键字代替class关键字
    2、对象(常量)的创建必须放在枚举类中的第一句

    【语法】

    对象名(实参列表), 对象名(实参列表);

    3、如果是无参构造,则无参构造的定义和实参列表都可以省略

    /**
     * 此类用于演示使用enum关键字定义枚举类【掌握】
     * 引入:jdk5.0出现的新特性
     * 特点:
     *         1、使用enum关键字代替class关键字
     *         2、对象(常量)的创建必须放在枚举类中的第一句
     *         语法:
     *         对象名(实参列表),对象名(实参列表);
     *         3、如果是无参构造,则无参构造的定义和实参列表都可以省略
     *
     */
    public class TestEnum2 {
        
        public static void main(String[] args) {
            //引用枚举类的对象
            //示例1:
            System.out.println(Gender2.GIRL);
            
            //示例2:
            System.out.println(Season2.SUMMER);
        }
    }
    enum Season2{
        //2.本类内部创建一组对象,添加public static修饰符,直接暴露对象
        SPRING("春天","春风又绿江大南"),
        SUMMER ("夏天","接天莲叶无穷碧"),
        AUTUMN ("秋天","霜叶红于二月花"),
        WINTER("冬天","千树万树梨花开");
    
        private String name;
        private String description;
        
        //1、构造器私有化    
        private Season2(String name, String description) {
            this.name = name;
            this.description = description;
        }
        public String getName() {
            return name;
        }
        public String getDescription() {
            return description;
        }
    }
    
    //简单示例1:使用无参构造器:枚举常量
    enum Gender2{
        BOY,GIRL;
    }

    介绍枚举类的常见方法【了解】

    toString:Enum类已经重写过了,返回的是当前对象的常量名。自定义的枚举类可以继续重写该方法

    name:Enum类中的name方法返回的是当前对象的常量名(同toString),但自定义的枚举类不可以继续重写该方法

    values:一个静态方法,用于返回指定的枚举类中的所有枚举常量

    valueOf:一个静态方法,将一个有效的字符串转换成枚举对象

    枚举类如何实现接口掌握

    特点:

    1. 和普通类实现接口一样,只是允许枚举常量也有自己对抽象方法的特有实现!

    2. enum类不能再继承其他类,因为已经隐式的直接继承了Enum类

    语法:

    enum A implements 接口1,接口2{
        常量1(参数){
            //抽象方法的实现
     
        },常量2(参数){
            //抽象方法的实现
        }
        //类对抽象方法的实现
     }

    示例:

    /**
     * 此类用于演示枚举类实现接口
     * 
     * 特点:
     *     1.和普通类实现接口一样,只是允许枚举常量也有自己对抽象方法的特有实现!
     *     2.enum类不能再继承其他类,因为已经隐式的直接继承了Enum类
     * 语法:
     * enum A implements 接口1,接口2{
     *         常量1(参数){
     *             //抽象方法的实现
     * 
     *         },常量2(参数){
     * 
     *             //抽象方法的实现
     *         }
     *         //类对抽象方法的实现
     * }
     *
     */
    public class TestEnum4 {
        
        public static void main(String[] args) {
            Show s = Color4.RED;
            s.display();
            
            Color4.BLACK.display();
        }
    }
    interface Show{
        void display();
    }
    enum Color4 implements Show{
        RED(255,0,0){
            public void display(){
                System.out.println("我是红色");
            }
        },
        BLUE(0,0,255){
            public void display(){
                System.out.println("我是蓝色");
            }
        },
        BLACK(0,0,0){
            public void display(){
                System.out.println("我是蓝色");
            }
        },
        YELLOW(255,255,0){
            public void display(){
                System.out.println("我是黄色");
            }
        },
        GREEN(0,255,0){
            public void display(){
                System.out.println("我是蓝色");
            }
        };
        private int redValue;
        public int getRedValue() {
            return redValue;
        }
        public int getGreenValue() {
            return greenValue;
        }
        public int getBlueValue() {
            return blueValue;
        }
        private int greenValue;
        private int blueValue;
        private Color4(int redValue, int greenValue, int blueValue) { // 构造器
            this.redValue = redValue;
            this.greenValue = greenValue;
            this.blueValue = blueValue;
        }
    }
  • 相关阅读:
    LCS(最长公共子序列)
    如何利用MAXScript代码进行DNA双螺旋结构的创建
    如何在3ds MAX中进行宏脚本MacroScript的编写
    3dsmax:[5]maxscript是干什么的
    Visual MAXScript 工具
    3D MAXScript(1)
    如何写3DMAX的插件
    利用GitHub for Window 来进行项目的上传
    VS中的库
    软件测试作业
  • 原文地址:https://www.cnblogs.com/MWCloud/p/11208683.html
Copyright © 2011-2022 走看看