拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 比起睡觉,我更喜欢刷巨详细的Java列举类,这是来自猿人的自觉呀

比起睡觉,我更喜欢刷巨详细的Java列举类,这是来自猿人的自觉呀

白鹭 - 2022-01-25 1962 0 0

零基础学习之Java列举类

    • 概述
    • JDK1.5之前
      • 创建列举类
      • 代码示例
    • JDK1.5之后
      • 创建列举类
      • 代码示例
    • 列举类继承父类
      • 基本介绍
      • 代码示例
    • 列举类实作界面
      • 基本介绍
      • 代码示例
    • 列举类实作单例模式
      • 基本介绍
      • 代码示例

概述

列举类是Java类中一个特殊的类,它是用来专门解决某些型别的物件是有限的几个的场景,这样的场景在我们的生活中非常常见,比如:人的性别(男,女),一年的月份(1月…12月),一年的季节(春夏秋冬),一周内天的表示法(周一…周日),彩虹的颜色(红…紫)等等,所以列举类在实际生活中尤其的有用,

注:列举类也不能被其他类继承

代码示例

测验类

package com.atguigu.demo;
import com.atguigu.bean.Gender2;

public class Demo3 {

    public static void main(String[] args) {

        Gender2 gender2 = Gender2.BOY; 

        //获取物件的名称
        System.out.println(gender2.name());

        //回传也是物件的名称,自定义的列举类可以再次重写
        System.out.println(gender2.toString());
        
        //回传当前物件的位置(角标)
        System.out.println(gender2.ordinal());

        //回传该列举类所有的常量物件
        Gender2[] gender21 =Gender2.values();

        for (int i = 0; i < gender21.length; i++) {
            System.out.println(gender21[i]);
        }

        //根据字符串的名称,回传常量物件
        String str = "BOY";
        Gender2 gender22 = Gender2.valueOf(str);

        System.out.println(gender22);


    }
}

列举类实作界面

基本介绍

列举类虽然不能继承其他的类,但是列举类也是类,可以实作界面,可以同时实作多个界面,可以统一实作,也可以用匿名内部类的形式,单独给某个常量物件实作抽象方法,

修饰符 类名 implements 界面名{

}

注意:

  • 列举类提供的物件个数是确定的,并且在类加载的时候物件已经产生了,所以,抽象方法的实作,可以将范围缩小到某个物件
常量物件 【(实参串列){
	对父级做扩展
}
  • 当列举类中所有的物件都单独对抽象方法做了实作,那么公有的实作就可以洗掉

代码示例

public enum Gender3 implements Eat {

    BOY("男孩"){
        @Override
        public void eat() {
            System.out.println("男孩吃的多");
        }
        },
    GIRL("女孩"){
        @Override
    public void eat() {
            System.out.println("女孩吃的多");
        }
    };
}

interface Eat{
    void eat();
}

列举类实作单例模式

基本介绍

如果列举类的物件只有一个,那么可以作为单例模式的实作,这是因为单例模式约束一个类只能实体化一个物件,目前来说在Java中,为了强制只实体化一个物件,最好的方法是使用一个列举量,

在 Java 中使用列举作为单例有以下几个原因:

  • 自由序列化,
  • 保证一个实体(即使通过反射也不能实体化超过一个列举,)
  • 执行绪安全

代码示例

public class Singleton {
    public static void main(String[] args) {
        Singleton singleton1  = Singleton.INSTANCE;
        Singleton singleton2  = Singleton.INSTANCE;

        System.out.println(singleton1  == singleton2  );
        System.out.println("singleton1 ,hashCode= " + singleton1.hashCode());
        System.out.println("singleton2 ,hashCode = " + singleton2.hashCode());

        singleton1.sayOK();
    }
}

enum Singleton{
    INSTANCE;
    
    public void sayOK() {
        System.out.println("ok~");
    }
}

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *