JAVA基础 | 枚举 - 认识枚举

本文详细介绍了Java中的枚举类,包括其构造器特性(私有且继承自Enum),如何定义和调用枚举对象,枚举类提供的额外API(values()和valueOf()),以及如何使用枚举实现抽象枚举和单例设计模式。
摘要由CSDN通过智能技术生成

1. 创建一个枚举类

public enum A {
    X, Y, Z;    //枚举类的第一行必须是枚举对象的名字

    //定义类的各种成员...

    //定义类的各种方法...
}

要注意的是,在枚举类中,第一行必须是枚举对象的名字。

以上是我们在编译器中编写的代码,那么在实际编译后是什么样子呢?代码如下:

public final class A extends java.lang.Enum<A> {
    public static final A X = new A();
    public static final A Y = new A();
    public static final A Z = new A();

    public static A[] values();
    public static A valueOf(java.lang.String);
}

注意:

  • 枚举类的第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象
  • 枚举类的构造器都是私有的(写不写都只能是私有的),因此,枚举类对外不能创建对象
  • 枚举都是最终类不能被继承
  • 枚举类中,从第二行开始,可以定义类的其他各种成员。
  • 编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法。

2. 调用枚举类中的一个枚举对象

public class Main() {
    public static void main(String[] args) {
        A a1 = A.X;
        System.out.println(a1);
    }
}

上述打印出来的结果为A

3. 两点注意:

1. 枚举类的构造器是私有的,不能对外创建对象
public enum A {
    X, Y, Z;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class Test {
    public static void main(String[] args) {
        A a = new A();
    }
}

2. 枚举类的第一行都是常量,记住的是枚举类的对象

public class Test {
    public static void main(String[] args) {
        A a2 = A.Y;
    }
}

 

4. 枚举类所提供的额外API

1. 拿到枚举类的全部对象

使用 枚举类名称.values()  可以获取枚举类的全部对象。在下面的代码中,将拿到的所有对象存入数组as。

public class Test {
    public static void main(String[] args) {
        A a2 = A.Y;
        A[] as =  A.values();

        //打印数组as
        for (int i = 0; i < as.length; i++) {
            System.out.println(as[i]);
        }
    }
}

输出结果:

2. 获取枚举对象的名称,索引

首先,将枚举对象Z存入a1变量,接着,可以使用 a1.name() 获取枚举对象的名称;使用 a1.ordinal() 获取对象的索引

public class Test {
    public static void main(String[] args) {
        A a1 = A.valueOf("Z");
        System.out.println(a1.name());  //Z
        System.out.println(a1.ordinal());    //获取索引
    }
}

代码输出结果:

5. 拓展: 抽象枚举

所谓抽象枚举,就是在枚举类中定义抽象方法。

要注意的是,在这种情况下,第一行就不能直接写枚举对象的名称了,因为这里抽象类是不能直接创建抽象对象的,所以需要重写:

public enum A {
    X(){
        @Override
        public void go() {
        
        }
    },Y("张三"){
        @Override
        public void go() {
            System.out.println(getName() + "在跑~~");
        }
    };

    private String name;

    public abstract void go();

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

以上是一个抽象枚举的例子,那么我们现在来Main类中调用一下

public class Main() {
    public static void main(String[] args) {
        A y = A.Y;
        y.go();
    }
}

这样将会输出结果:张三在跑~~

6. 使用枚举类实现单例设计模式

由于枚举类本身的构造器是私有化的,所以可以很快就写出一个单例设计模式。

public enum A {
    X;
}

然后在后面去写这个单例需要实现的方法就可以了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值