自学内容网 自学内容网

第六章 6.5 枚举类

枚举的作用 

无枚举

/**
 * 一下程序不使用枚举类型,大家分析这个程序存在的问题,哪里可以改进呢?
 *      两个问题:
 *          1.可读性差。
 *          2.错误没有在编译阶段提醒。比如get()返回20
 */
public class Test01 {
    public static void main(String[] args) {
        int i = get();
        switch (i){
            case 1 -> System.out.println("春");
            case 2 -> System.out.println("夏");
            case 3 -> System.out.println("秋");
            case 4 -> System.out.println("冬");
        }
    }

    /**
     * 这个方法可能会返回一个int类型的值:
     * 1 2 3 4
     * @return
     */
    public static int get(){
        return 1;
    }
}

有枚举

/**
 * 枚举类型:季节
 */
public enum Season {
    //直接定义枚举值:每一个枚举值可以看作类中的常量。
    SPRING,SUMMER,AUTUMN,WINTER
}
/**
 * 使用枚举类型,分析优点:
 *      1.可读性强了
 *      2.限定了返回值不能随意返回,只能返回枚举类型中的值。return Season.SPRING;
 *
 */
public class Test02 {
    public static void main(String[] args) {
        {
            Season season = get();
            switch (season){
                case SPRING -> System.out.println("春");
                case SUMMER -> System.out.println("夏");
                case AUTUMN -> System.out.println("秋");
                case WINTER -> System.out.println("冬");
            }
        }

    }
    /**
     * 这个方法可能会返回一个int类型的值:
     * 1 2 3 4
     * @return
     */
    public static Season get(){
        return Season.SPRING;
    }
}

底层原理

反编译之后,发现是一个final修饰的类,不能有子类,默认继承了一个类,

变量都是final修饰的常量,还有一个value()方法,返回一个数组。

public enum Color {
    BLUE,GREEN,RED
}

//枚举类中的遍历方法
public class Test03 {
    public static void main(String[] args) {
        Color[] colors = Color.values();
        for (Color color : colors){
            System.out.println(color);
        }
    }
}

 枚举的高级用法

枚举类型使用实例

枚举类

public enum Season {
    //使用了构造方法,就必须这样写,相当于每一个枚举类型都是Season得实例,
    //里边带的是参数
    SPRING("春", "春意盎然"),
    SUMMER("夏", "夏日炎炎"),
    AUTUMN("秋", "落叶飘飘"),
    WINTER("冬", "白雪皑皑");
    
    //属性值,用final修饰,不可改变。
    private final String name;
    private final String desc;
    
    //构造方法
    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }
    
    //get()方法
    public String getName() {
        return this.name;
    }
    //get()方法
    public String getDesc() {
        return this.desc;
    }
}

主方法

public class Test {
    public static void main(String[] args) {
        Season season = get();
        switch (season){
            case SPRING -> System.out.println(Season.SPRING.getDesc());
            case SUMMER -> System.out.println(Season.SPRING.getDesc());
            case AUTUMN -> System.out.println(Season.SPRING.getDesc());
            case WINTER -> System.out.println(Season.SPRING.getDesc());
        }
        //遍历
        Season[] seasons = Season.values();
        for (Season s: seasons){
            System.out.println(s.getName() +" - "+ s.getDesc());
        }
    }

    public static Season get(){
        return Season.SPRING;
    }
}


原文地址:https://blog.csdn.net/tiao_tiao_hu/article/details/142849290

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!