• JDK5.0新特性-枚举


    枚举

    枚举是什么?
    它就是一个特殊的java类.

    类的定义
    class 类名{}
    接口的定义
    interface 接口名{}
    枚举的定义
    enum 枚举名{}

    示例
    public enum Demo1{} 也会生成一个class文件.

    我们对其进行反编译.
    定义到我们的class文件所在目录下 执行 javap Demo1

    得到的结果
    public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> {
    static {};
    public static Demo1[] values();
    public static Demo1 valueOf(java.lang.String);
    }

    枚举它是一个java类,它继承了java.lang.Enum这个类.



    枚举有什么用?

    我们在开发中,有些数据必须被限定在某个范围内取值,不可以超出这个范围,那么这时就可以使用枚举.
    比我们传统的代码书写简单.

    ------------------------------------------------------------
    枚举的语法
    枚举类也是一种特殊形式的Java类。
    枚举类中声明的每一个枚举值代表枚举类的一个实例对象。

    与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
    若枚举类只有一个枚举值,则可以当作单态设计模式使用。


    注意:在枚举中可以声明方法,属性,构造方法.构造方法必须private。

    如果枚举中只有枚举值,最后一个枚举值后面可以不写;结束符.
    如果有了其它成员,必须在最后一个枚举值加上";".

    1.构造方法必须private,可以重载.
    2.在枚举中声明属性,声明方法.

    ---------------------------------------------------
    1:枚举默认就是abstract的,不可以实例化。
    2:枚举中可以拥有abstract抽像方法。
    3:枚举的所有成员,都默认是public static final类型的。且必须要第一行开始声明。必须在,(逗号)分开。
    4:所有的枚举,默认都是java.lang.Enum。
    5:Enum类不但是所有枚举的公共的基类,还是一个工具类。


    enum ------它是用于声明枚举类的.
    Enum ------java中的一个类,它代表所有枚举的父类.
    Enumeration----相当于Iterator 遍历集合

    --------------------------------------
    枚举类中可以声明abstract方法.
    如果枚举类中存在抽象方法,对于每一个枚举值必须对这些抽象方法进行重写.

    -------------------------------------------------------------------------------
    枚举的方法.

    1.枚举类中自带
    values()-----得到枚举类中的所有枚举值
    valueOf()------

    2.枚举类从java.lang.Enum类继承的.

    name方法---得到枚举值的字符串表现形式.
    ordinal() ----得到枚举值的序号
    valueOf(Class c,String name)将一个字符串转换成指定枚举类型的枚举值

    ----------------------------------------------------
    枚举知识点掌握
    1.枚举在什么时候使用,怎样定义枚举.
    2.枚举中可以包含什么内容
    3.枚举中常用的方法.

    1

    package cn.itcast.enumdemo;
    
    public class Demo4 {
        // 提高阅读性,提高安全性
        public static void main(String[] args) {
    
            Employee e = new Employee("张三", 1000, Role.BOSS);
        }
    }
    
    // 声明一个员工类
    class Employee {
    
        private String name;
        private double salary;
    
        // 员工有角色.对于我们的程序,员工的角色有三种 BOSS MANAGER WORKER
    
        public Role role;
    
        public Employee(String name, double salary, Role role) {
            super();
            this.name = name;
            this.salary = salary;
            this.role = role;
        }
    
    }
    
    enum Role{
        BOSS,MANAGER,WORKER
    }
    //上面和下面是相等的
    // class Role {
    //
    // private Role() {
    // }
    //
    // public static final Role BOSS = new Role();
    // public static final Role MANAGER = new Role();
    // public static final Role WORKER = new Role();
    //
    // }

    在枚举中可以声明方法,属性,构造方法.构造方法必须private

    package cn.itcast.enumdemo;
    
    public class Demo5 {
    
        public static void main(String[] args) {
            // EnumDemo.A;
        }
    }
    
    // 创建一个枚举
    enum EnumDemo {
        // 枚举值.
        A {
            @Override
            public void print() {
                // TODO Auto-generated method stub
    
            }
        },
        B {
            @Override
            public void print() {
                // TODO Auto-generated method stub
    
            }
        },
        C {
            @Override
            public void print() {
                // TODO Auto-generated method stub
    
            }
        };
        // 上面的每一个枚举值,代表的是EnumDemo类的一个对象.
        // 对于枚举值我们可以直接使用枚举名.枚举值.本质上是因为它是一个static修饰的.
    
        // 声明属性
        private int id;
    
        // 构造方法.
        EnumDemo() {
        }
    
        EnumDemo(String name) {
        }
    
        // 声明方法
        public void show() {
        }
    
        // 可以存在抽象方法.
        public abstract void print();
    }

    枚举的方法.

    package cn.itcast.enumdemo;
    
    import java.util.Arrays;
    
    import org.junit.Test;
    
    public class Demo8 {
    
        // 从父类java.util.Enum继承的方法.
        // name方法
        @Test
        public void demo1() {
            String name = EnumDemo1.A.name();
            System.out.println(name);
        }
    
        @Test
        // ordinal()
        public void demo2() {
            int index = EnumDemo1.A.ordinal();
            System.out.println(index);
        }
    
        @Test
        // valueOf---将一个字符串转换成指定枚举类型的枚举值
        public void demo3() {
            EnumDemo1 ed = Enum.valueOf(EnumDemo1.class, "A");
            
            System.out.println(ed==EnumDemo1.A);
        }
        
        //枚举类中自带两个方法.
        @Test
        //values()
        public void demo4(){
            EnumDemo1[] eds=EnumDemo1.values();
            System.out.println(Arrays.toString(eds));
        }
        
        @Test
        //valueOf
        public void demo5(){
            EnumDemo1 ed=EnumDemo1.valueOf("A");
            System.out.println(ed);
        }
    }
    
    enum EnumDemo1 {
        A, B, C
    }
  • 相关阅读:
    go笔记
    脚本
    php-log
    idea maven scala
    Corporative Network
    uva1160
    比map更强大的multimap
    Message Decowding
    kmp 的next 数组求法
    Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/spadd/p/4191345.html
Copyright © 2020-2023  润新知