zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    IE里ActiveXObject的一些实践
    JS兼容性问题汇总
    js:apply/call
    mark 一些近来用过的js库
    (转)时序分析基本概念
    (转载) 使用TimeQuest时序分析器
    (转)Altera对应的时序概念
    有序符号表(二叉树实现,JAVA,算法(四))
    有序符号表(数组实现,JAVA,算法(四),二分法)
    无序符号表(链表实现,JAVA,算法(四))
  • 原文地址:https://www.cnblogs.com/1995stone/p/13623309.html
Copyright © 2011-2022 走看看