zoukankan      html  css  js  c++  java
  • 【JAVA基础】枚举

    1. 枚举的定义

    1.1. 使用public static final表示的常量描述较为繁琐,使用enum关键字来定 义枚举类型取代常量,枚举类型是从Java5开始增加的一种引用数据类型。

    1.2. 枚举值就是当前类的类型,也就是指向本类的对象,默认使用public static final关键字共同修饰,因此采用枚举类型.的方式调用。

    1.3. 枚举类可以自定义构造方法,但是构造方法的修饰符必须是private,默 认也是私有的。

    2. Enum类的概念和方法

    2.1. 所有的枚举类都继承自java.lang.Enum类,常用方法如下:

     static T[] values() 
    返回当前枚举类中的所有对象

    String toString()

    返回当前枚举类对象的名称
    

    int ordinal()

    获取枚举对象在枚举类中的索引位置
    

    static T valueOf(String str)

    将参数指定的字符串名转为当前枚举类的对象
    

    int compareTo​(E o)

    比较两个枚举对象在定义时的顺序
    

    3. 枚举类实现接口的方式

      枚举类实现接口后需要重写抽象方法,而重写方法的方式有两种:重写 一个,或者每个对象都重写。 

    1 package com.lagou.task10;
    2 
    3 public interface DirectionInterface {
    4     // 自定义抽象方法
    5     public abstract void show();
    6 }
     1 package com.lagou.task10;
     2 
     3 /**
     4  * 编程实现所有方向的枚举,所有的方向:向上、向下、向左、向右   枚举类型要求所有枚举值必须放在枚举类型的最前面
     5  */
     6 public enum DirectionEnum implements DirectionInterface {
     7     // 2.声明本类类型的引用指向本类类型的对象
     8     // 匿名内部类的语法格式:接口/父类类型 引用变量名 = new 接口/父类类型() { 方法的重写 };
     9     // public static final Direction UP = new Direction("向上") { 方法的重写 };
    10     UP("向上") {
    11         @Override
    12         public void show() {
    13             System.out.println("贪吃蛇向上移动了一下!");
    14         }
    15     }, DOWN("向下") {
    16         @Override
    17         public void show() {
    18             System.out.println("贪吃蛇向下移动了一下!");
    19         }
    20     }, LEFT("向左") {
    21         @Override
    22         public void show() {
    23             System.out.println("左移了一下!");
    24         }
    25     }, RIGHT("向右") {
    26         @Override
    27         public void show() {
    28             System.out.println("右移了一下!");
    29         }
    30     };
    31 
    32     private final String desc; // 用于描述方向字符串的成员变量
    33 
    34     // 通过构造方法实现成员变量的初始化,更加灵活
    35     // 1.私有化构造方法,此时该构造方法只能在本类的内部使用
    36     private DirectionEnum(String desc) { this.desc = desc; }
    37 
    38     // 通过公有的get方法可以在本类的外部访问该类成员变量的数值
    39     public String getDesc() {
    40         return desc;
    41     }
    42 
    43     // 整个枚举类型只重写一次,所有对象调用同一个
    44     /*@Override
    45     public void show() {
    46         System.out.println("现在可以实现接口中抽象方法的重写了!");
    47     }*/
    48 }
     1 package com.lagou.task10;
     2 
     3 /**
     4  * 编程实现方向枚举类的测试,调用从Enum类中继承下来的方法
     5  */
     6 public class DirectionEnumTest {
     7 
     8     public static void main(String[] args) {
     9 
    10         // 1.获取DirectionEnum类型中所有的枚举对象
    11         DirectionEnum[] arr = DirectionEnum.values();
    12         // 2.打印每个枚举对象在枚举类型中的名称和索引位置
    13         for (int i = 0; i < arr.length; i++) {
    14             System.out.println("获取到的枚举对象名称是:" + arr[i].toString());
    15             System.out.println("获取到的枚举对象对应的索引位置是:" + arr[i].ordinal()); // 和数组一样下标从0开始
    16         }
    17 
    18         System.out.println("---------------------------------------------------------------");
    19         // 3.根据参数指定的字符串得到枚举类型的对象,也就是将字符串转换为对象
    20         //DirectionEnum de = DirectionEnum.valueOf("向下"); // 编译ok,运行发生IllegalArgumentException非法参数异常
    21         DirectionEnum de = DirectionEnum.valueOf("DOWN");
    22         //DirectionEnum de = DirectionEnum.valueOf("UP LEFT"); // 要求字符串名称必须在枚举对象中存在
    23         //System.out.println("转换出来的枚举对象名称是:" + de.toString());
    24         System.out.println("转换出来的枚举对象名称是:" + de); // 当打印引用变量时,会自动调用toString方法
    25 
    26         System.out.println("---------------------------------------------------------------");
    27         // 4.使用获取到的枚举对象与枚举类中已有的对象比较先后顺序
    28         for(int i = 0; i < arr.length; i++) {
    29             // 当调用对象在参数对象之后时,获取到的比较结果为 正数
    30             // 当调用对象在参数对象相同位置时,则获取到的比较结果为 零
    31             // 当调用对象在参数对象之前时,则获取到的比较结果为 负数
    32             System.out.println("调用对象与数组中对象比较的先后顺序结果是:" + de.compareTo(arr[i]));
    33         }
    34 
    35         System.out.println("---------------------------------------------------------------");
    36         // 5.使用数组中每个DirectionEnum对象都去调用show方法测试
    37         for (int i = 0; i < arr.length; i++) {
    38             arr[i].show();
    39         }
    40     }
    41 }
  • 相关阅读:
    关键两招就解决Wampserver 打开localhost显示IIS7图片问题
    死磕!Windows下Apache+PHP+phpmyadmin的配置
    宝塔linux面板运行jsp文件的配置工作
    Python关于self用法重点分析
    Atom窗口切换和放大或者缩小
    容易掉坑的地方The value for the useBean class attribute XXX is invalid
    JS 之如何在插入元素时插在原有元素的前面而不是末尾
    ul或者ol中添加li元素
    页面右下角广告
    getAttribute与setAttribute
  • 原文地址:https://www.cnblogs.com/Tree0108/p/14106734.html
Copyright © 2011-2022 走看看