Enumeración básica de Java (palabra clave enum)

prefacio

Recientemente, estuve revisando el conocimiento de la parte de JavaSE, grabando algunos conocimientos débiles, métodos de aprendizaje, aprendiendo a través de videos y libros, viendo el video de los 30 días de aprendizaje de Java del Sr. Han Shunping en la estación B y leyendo el conocimiento básico de Java. volumen de tecnología central I en el libro (Libro original 10ª Edición).

Han Shunping aprendió Java en 30 días Dirección: https://www.bilibili.com/video/BV1fh411y7R8?p=425
inserte la descripción de la imagen aquí

Una introducción a la enumeración

1. La derivación de la enumeración (enumeración personalizada)

Requisito: Cree un objeto de temporada (Temporada) que contenga el nombre y la descripción de la temporada

package com.dudu.enumerone;

public class Season {
    
    
    private String name;
    private String desc;


    public Season(String name, String desc) {
    
    
        this.name = name;
        this.desc = desc;
    }


    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }
}


class Test{
    
    
    public static void main(String[] args) {
    
    
        Season spring = new Season("春天","温暖");
        Season winter = new Season("冬天", "寒冷");
        Season summer = new Season("夏天", "炎热");
        Season autumn = new Season("秋天", "凉爽");

    }

}

El código anterior puede satisfacer nuestras necesidades, pero podemos saber que el objeto de temporada es fijo (primavera, verano, otoño e invierno), y no habrá otras estaciones, si agregamos otro objeto Temporada, este fijo se romperá. ¡Obviamente esta forma no es perfecta!
inserte la descripción de la imagen aquí

Mejorar aún más
el análisis de las características del objeto Temporada:

  • El valor de la temporada es un número limitado de valores (primavera, verano, otoño, invierno)
  • solo lectura, no se requiere modificación

De acuerdo con las características anteriores, diseñe el siguiente código:

package com.dudu.enumerone;

public class Season {
    
    
    private String name;
    private String desc;

    public static final Season SPRING = new Season("春天","温暖");
    public static final Season WINTER = new Season("冬天", "寒冷");
    public static final Season SUMMER = new Season("夏天", "炎热");
    public static final Season AUTUMN = new Season("秋天", "凉爽");

    private Season(String name, String desc) {
    
    
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
    
    
        return name;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }
}

class Test{
    
    
    public static void main(String[] args) {
    
    
        System.out.println("季节:"+Season.SPRING.getName()+"描述:"+Season.SPRING.getDesc());
        System.out.println("季节:"+Season.WINTER.getName()+"描述:"+Season.WINTER.getDesc());
        System.out.println("季节:"+Season.SUMMER.getName()+"描述:"+Season.SUMMER.getDesc());
        System.out.println("季节:"+Season.AUTUMN.getName()+"描述:"+Season.AUTUMN.getDesc());

    }

}

Efecto corriente:
inserte la descripción de la imagen aquí
Nota:
( 这里的不可修改表示的是无法改为指向其他对象,但其指向的对象本身是可以被修改的。)

Los objetos de referencia modificados finales no pueden apuntar a otros objetos: el
inserte la descripción de la imagen aquí
objeto mismo puede modificarse:
inserte la descripción de la imagen aquí
efectos de ejecución:
inserte la descripción de la imagen aquí

2. Usa la palabra clave enum

La enumeración (enumeración, enumeración abreviada) es un conjunto de constantes, que pertenecen a una clase especial, que contiene solo un conjunto limitado de objetos específicos.

En el código anterior, la clase Season contiene nada más que cuatro conjuntos de objetos constantes (primavera, verano, otoño, invierno), que están muy en línea con la definición de enumeración, podemos usar la palabra clave enum para lograrlo.

package com.dudu.enumerone;

public enum SeasonEnum {
    
    
    SPRING("春天","温暖"),
    SUMMER("夏天","炎热"),
    AUTUMN("秋天","凉爽"),
    WINTER("冬天","寒冷")
    ;

   private SeasonEnum(String name, String desc) {
    
    
        this.name = name;
        this.desc = desc;
    }

    private String name;
    private String desc;

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public String getDesc() {
    
    
        return desc;
    }

    public void setDesc(String desc) {
    
    
        this.desc = desc;
    }
}


class  Test_Enum{
    
    
    public static void main(String[] args) {
    
    
        System.out.println("季节:"+SeasonEnum.SPRING.getName()+"描述:"+SeasonEnum.SPRING.getDesc());
        System.out.println("季节:"+SeasonEnum.WINTER.getName()+"描述:"+SeasonEnum.WINTER.getDesc());
        System.out.println("季节:"+SeasonEnum.SUMMER.getName()+"描述:"+SeasonEnum.SUMMER.getDesc());
        System.out.println("季节:"+SeasonEnum.AUTUMN.getName()+"描述:"+SeasonEnum.AUTUMN.getDesc());
    }
}

resultado de ejecución:
inserte la descripción de la imagen aquí

Encontraremos que SeasonEnum (usando la palabra clave enum) está muy familiarizado con la clase Season diseñada anteriormente, con solo dos diferencias:

  • Season usa la palabra clave Class, que es una clase, mientras que SeasonEnum usa la palabra clave enum

inserte la descripción de la imagen aquí

  • Los objetos constantes en SeasonEnum son similares a la taquigrafía de Season

inserte la descripción de la imagen aquí

De hecho, la clase Season también es una forma de implementar la enumeración, es decir, un tipo de enumeración personalizado.
Código fuente descompilado de la clase Season: Código
inserte la descripción de la imagen aquí
fuente descompilado SeasonEnum ( enum关键字本质上还是一个类(class),只是该类会继承Enum抽象类):
inserte la descripción de la imagen aquí

3. Notas (la palabra clave enum implementa la enumeración)

  • Cuando usamos la palabra clave enum para desarrollar una clase de enumeración, heredará la clase Enum de forma predeterminada y es una clase final.
  • public static final Season SPRING = new Season("春天","温暖");El método tradicional ( ) se simplifica a SPRING("春天","温暖"),, aquí debe saber a qué constructor llama
  • Si el objeto de enumeración se crea utilizando el constructor sin argumentos, se pueden omitir tanto la lista de argumentos como los paréntesis.
  • Cuando hay varios objetos de enumeración, use el ,intervalo y termine con un punto y coma al final;
  • El objeto de enumeración debe colocarse al principio de la línea de enumeración

Si se crea un objeto de enumeración utilizando el constructor sin argumentos, se pueden omitir tanto la lista de argumentos como los paréntesis:
inserte la descripción de la imagen aquí
el objeto de enumeración debe colocarse al principio de la línea de enumeración:
inserte la descripción de la imagen aquí

2. El uso de la enumeración

Requisitos, use el constructor sin argumentos, cree una enumeración de color (Color), que contenga tres constantes (ROJO, VERDE, AMARILLO)

el código se muestra a continuación:

package com.dudu.enumerone;

public enum Color {
    
    
    RED,
    GREEN,
    YELLOW
    ;
}


class  Test_ColorEnum{
    
    
    public static void main(String[] args) {
    
    
        Color color = Color.RED;
        Color color1 = Color.RED;
        System.out.println(color);
        System.out.println(color == color1);
    }
}

resultado de ejecución:
inserte la descripción de la imagen aquí

  • El primer resultado REDes el nombre devuelto por Color al llamar al método toString() de la clase principal Enum (el nombre aquí es RED)
    inserte la descripción de la imagen aquí
  • La segunda salida devuelve true, esto se debe a que RED es una constante estática que actúa sobre la clase (la dirección y el valor son los mismos), y color y color1 apuntan a la misma dirección
    inserte la descripción de la imagen aquí

3. Métodos comunes de enumeración

Descripción: al usar la palabra clave enum, la clase Enum se heredará implícitamente, de modo que podamos usar los métodos relacionados de la clase Enum.
inserte la descripción de la imagen aquí

package com.dudu.enumerone;

public class EnumMethod {
    
    
    public static void main(String[] args) {
    
    
        // name():返回枚举对象的名字
        System.out.println(SeasonEnum.AUTUMN.name());
        // ordinal():返回枚举对象的次序(从0开始编号)
        System.out.println(SeasonEnum.AUTUMN.ordinal());

        // values():返回定义的所有枚举对象
        SeasonEnum[] seasonEnums =  SeasonEnum.values();
        for (SeasonEnum seasonEnum:seasonEnums){
    
    
            System.out.println(seasonEnum);
        }
        // valueOf():将字符串转换成枚举对象,要求该字符串必须为已有的常量名,否则会报错
        SeasonEnum seasonEnum = SeasonEnum.valueOf("SPRING");
        System.out.println(seasonEnum.getName());

        // compareTo():比较二个枚举常量,比较的是编号(前一个的编号减后一个的编号) self.ordinal - other.ordinal
        System.out.println("SPRING的编号为"+SeasonEnum.SPRING.ordinal());
        System.out.println("AUTUMN的编号为"+SeasonEnum.AUTUMN.ordinal());
        System.out.println("SPRING的编号 - AUTUMN的编号为"+(SeasonEnum.SPRING.ordinal()-SeasonEnum.AUTUMN.ordinal()));
        System.out.println("SPRING和AUTUMN比较的编号为"+SeasonEnum.SPRING.compareTo(SeasonEnum.AUTUMN));
    }
}

resultado de ejecución:
inserte la descripción de la imagen aquí

4. Detalles de uso de la enumeración

  • Después de usar la palabra clave enum, no se pueden heredar otras clases, porque enum heredará implícitamente Enum, y Java es un mecanismo de herencia único.
  • Al igual que las clases ordinarias, las clases de enumeración pueden implementar interfaces, como:enum 类名 implements 接口1,接口2{}

Después de usar la palabra clave enum, no se pueden heredar otras clases:
inserte la descripción de la imagen aquí

Al igual que las clases ordinarias, las clases de enumeración pueden implementar interfaces:
inserte la descripción de la imagen aquí

resultado de ejecución:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_42753193/article/details/123961562
Recomendado
Clasificación