• Java中的枚举类


    一、基本形式

    public enum 类名{A,B,C;}大括号里面为变量名,由于枚举类存放的变量用final修饰为常量,因此变量名大写。

    如:

    public enum TestNume{
    A,B,C;
    }

    枚举类的每个变量名都可看作:

    public static final 类名 变量名 = new 类名();因此用类名.变量名就可以得到一个类的对象。

    如:public static final TestNume A = new TestNume();

    而且内部私有化枚举类的构造器private 类名() {},如下:

    private TestNume(){};

    由于枚举类无法通过new来获取对象,因此定义的每个变量实例都是引用类型的唯一实例。

    class Test{
    public static void main(String[] args) {
    TestNume D = new TestNume();
    //内部已经私有构造器,因此会报错
    }
    }

    二、常用方法

    2.1name()

    顾名思义得到变量的名字,如果不重写toString方法,类名.变量名与类名.变量名.name()相等。

    public enum TestNume{
    A,B,C;

    }
    class Test{
    public static void main(String[] args) {
    String name = TestNume.A.name();
    System.out.println(name);//A
    }
    }

    2.2ordinal()

    返回变量在枚举类的顺序,从0开始

    public enum TestNume{
    A,B,C;

    }
    class Test{
    public static void main(String[] args) {
    int rank = TestNume.A.ordinal();
    System.out.println(rank);//0
    System.out.println(TestNume.B.ordinal());//1
    System.out.println(TestNume.C.ordinal());//2
    }
    }

    三、高级形式

    上面的基本形式为枚举的无参构造,下面讲解枚举的有参构造,我们可以定义private的构造方法,并且,给每个枚举常量添加字段,字段的修饰符pubic final不写也会默认,构造器的修饰符private不写,也会走默认,如下所示:

    public enum TestNume{
    A("a",12),B("b",15),C("c",16);
    public final String name;
    public final int age;
    private TestNume(String name, int age) {
    this.name = name;
    this.age = age;
    }
    }

    相当于:

    public static final TestNume A = new TestNume("a",12);

    枚举并没有给获取字段值的方法,我们需要自己写get方法

    public String getName() {
    return name;
    }

    public int getAge() {
         return age;
    }

    由于字段是常量,因此无法用set方法,更改字段的值

    int aAge = TestNume.A.getAge();
    TestNume.A.setAge(15);
    System.out.println(aAge);//12

    小结

    Java使用enum定义枚举类型,它被编译器编译为final class Xxx extends Enum { … };

    通过name()获取常量定义的字符串,注意不要使用toString();

    通过ordinal()返回常量定义的顺序(无实质意义);

    可以为enum编写构造方法、字段和方法

    enum的构造方法要声明为private,字段强烈建议声明为final;

    enum适合用在switch语句中。

    引用于廖雪峰https://www.liaoxuefeng.com/wiki/1252599548343744/1260473188087424

  • 相关阅读:
    2022 flag 150篇文章 63 ES elastic search
    2022 flag 150编文章 005 java 网络编程
    2022 flag 150篇文章 91 分布式系统协调服务 分布式基础
    2022 flag 150篇文章 50 PMP
    2022 flag 150篇文章 61 消息队列 Kafka
    2022年1月最新最全的微前端框架调研
    sqlconnection,sqlcommand,sqldataadapter,sqldatareader,dataset的关系详解
    [日常] 解决docker拉取镜像速度慢的问题
    jupyter notebook下python2和python3共存(kali)
    Jboss弱密码及反序列化漏洞
  • 原文地址:https://www.cnblogs.com/1995stone/p/13623309.html
Copyright © 2020-2023  润新知