广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >浅谈java枚举类(附代码)
  • 684
分享到

浅谈java枚举类(附代码)

java 2020-08-22 18:08:39 684人浏览 绘本
摘要

java枚举类介绍:(java学习视频推荐:java视频教程)一、什么情况下使用枚举类?有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便。二、为什么不用静态常量来替代枚举类呢?public static final i

java枚举类介绍:(java学习视频推荐:java视频教程

一、什么情况下使用枚举类?

有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便。

二、为什么不用静态常量来替代枚举类呢?

public static final int SEASON_spring = 1;    
public static final int SEASON_SUMMER = 2;    
public static final int SEASON_FALL = 3;    
public static final int SEASON_WINTER = 4;

枚举类更加直观,类型安全。使用常量会有以下几个缺陷:

类型不安全。若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。

没有命名空间。开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。

三、枚举类入门

先看一个简单的枚举类。

package enumcase;public enum SeasonEnum {
    SPRING,SUMMER,FALL,WINTER;
}

enum和class、interface的地位一样使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。枚举类的构造器只能是私有的。

四、枚举类介绍

枚举类内也可以定义属性和方法,可是是静态的和非静态的。

package enumcase;public enum SeasonEnum {
    SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");    
    private final String name;    
    private SeasonEnum(String name)
    {        this.name = name;
    }    public String getName() {        return name;
    }
}

实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有显式申明无参构造器,只能调用有参数的构造器。

构造器需定义成私有的,这样就不能在别处申明此类的对象了。枚举类通常应该设计成不可变类,它的Field不应该被改变,这样会更安全,而且代码更加简洁。所以我们将Field用private final修饰。

五、枚举类实现接口

枚举类可以实现一个或多个接口。与普通类一样,实现接口的时候需要实现接口中定义的所有方法,若没有完全实现,那这个枚举类就是抽象的,只是不需显式加上abstract修饰,系统化会默认加上。

package enumcase;

public enum Operation {
    PLUS{

        @Override
        public double eval(double x, double y) {
            return x + y;
        }
        
    },
    MINUS{

        @Override
        public double eval(double x, double y) {
            return x - y;
        }
        
    },
    TIMES{

        @Override
        public double eval(double x, double y) {
            return x * y;
        }
        
    },
    DIVIDE{

        @Override
        public double eval(double x, double y) {
            return x / y;
        }
        
    };
    
    
    public abstract double eval(double x, double y);
    
    public static void main(String[] args) {
        System.out.println(Operation.PLUS.eval(10, 2));
        System.out.println(Operation.MINUS.eval(10, 2));
        System.out.println(Operation.TIMES.eval(10, 2));
        System.out.println(Operation.DIVIDE.eval(10, 2));
    }
}

Operatio类实际上是抽象的,不可以创建枚举值,所以此处在申明枚举值的时候,都实现了抽象方法,这其实是匿名内部类的实现,花括号部分是一个类体。我们可以看下编译以后的文件。

共生成了五个class文件,这样就证明了PLUS,MINUS,TIMES,DIVIDE是Operation的匿名内部类的实例。

1.jpg

六、switch语句里的表达式可以是枚举值

Java5新增了enum关键字,同时扩展了switch。

package enumcase;

public class SeasonTest {
    public void judge(SeasonEnum s)
    {
        switch(s)
        {
        case SPRING:
            System.out.println("春天适合踏青。");
            break;
        case SUMMER:
            System.out.println("夏天要去游泳啦。");
            break;
        case FALL:
            System.out.println("秋天一定要去旅游哦。");
            break;
        case WINTER:
            System.out.println("冬天要是下雪就好啦。");
            break;
        }
    }
    
    public static void main(String[] args) {
        SeasonEnum s = SeasonEnum.SPRING;
        SeasonTest test = new SeasonTest();
        test.judge(s);
    }
}

case表达式中直接写入枚举值,不需加入枚举类作为限定。

推荐:Java基础教程

--结束END--

本文标题: 浅谈java枚举类(附代码)

本文链接: https://www.lsjlt.com/news/1704.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅谈java枚举类(附代码)
    java枚举类介绍:(java学习视频推荐:java视频教程)一、什么情况下使用枚举类?有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便。二、为什么不用静态常量来替代枚举类呢?public static final i...
    99+
    2020-08-22
    java
  • 浅谈一下Java中枚举的用法
    目录枚举(enum)定义一个季节的枚举类枚举类values()方法ordinal()方法 valueOf()方法枚举类成员枚举(enum) 枚举是一个被命名的整型常数的集合...
    99+
    2023-05-14
    Java枚举 Java枚举的用法
  • Java浅析枚举类的使用
    目录1、枚举规则2、枚举的个数3、枚举类中常用函数4、实现枚举类5、枚举类的使用注意事项概念:有enum关键字修饰的类,成为枚举类 1、枚举规则 枚举类的对象可以有类里面定义,不支持...
    99+
    2022-11-13
  • Java编程枚举类实战代码分享
    本文句句走心,希望老铁们用心阅读并实战,一定会有收获的。摘要:本文主要讨论生产环境中枚举类的使用。首先会通过对枚举类概念进行简单的介绍,引入我们讨论的主题;然后就直接进入实战部分,本文只会介绍在实战中用的比较多,也比较常用的情况,所以希望老...
    99+
    2023-05-30
    java 枚举类 ava
  • 深入浅出讲解Java中的枚举类
    目录一、枚举类的使用 二、如何定义枚举类 背景:类的对象只有有限个,确定的。举例如下: > 星期: Monday (星期一)、….、 Sunday (星期天) > 性别:...
    99+
    2022-11-12
  • 浅谈Java多线程处理中Future的妙用(附源码)
    java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果。在两种情况下,离开Future几乎很难办。一种情况是拆分订单,比如你的应用收到一个批量订单,此时如果要求最快的处理订单,那么需要并...
    99+
    2023-05-31
    java 多线程 ava
  • 浅谈一段java代码是如何执行的
    目录1. 编译成class2. jvm的构成3. 方法的顺序执行和栈帧4. class文件反编译过后的样子5. 指令集详解本文分享自华为云社区《一段java代码是如何执行的》,原文作...
    99+
    2022-11-12
  • Java实现自定义枚举值校验器的示例代码
    目录前言注解校验使用前言 定义一个枚举类,现需要对传入的枚举值进行范围校验。 @Getter public enum UserTypeEnum { STUDENT(“1”, ...
    99+
    2023-02-22
    Java自定义枚举值校验器 Java枚举值校验器 Java枚举值校验 Java枚举值
  • 浅谈Java多线程的优点及代码示例
    尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好想象一下,一个应用程序需要从本地文件系统中读取和处理文件的情景。比方说,从磁盘读取一个文件需要5秒,处理一个文...
    99+
    2023-05-30
    java 多线程 ava
  • Java常用工具类汇总 附示例代码
    一、FileUtils private static void fileUtilsTest() { try { //读取文件内容 Stri...
    99+
    2022-11-12
  • Java中的“浅复制”与“深复制”的区别与实现(附代码)
    将一个对象的引用复制给另一个对象,一共有三种方式。第一种方式是直接赋值,第二种方式是浅复制,第三种方式是深复制。1.直接赋值在Java中,A a1 = a2,这实际上复制的是引用,也就是说 a1 和 a2指向的是同一个对象。因此,当a1变化...
    99+
    2016-02-27
    java基础 java 深复制 浅复制
  • Java杂谈之类和对象 封装 构造方法以及代码块详解
    目录1. 类和对象的初步认知2. 类的实例化3. 类的成员字段(属性/成员变量)方法static 关键字修饰字段修饰方法修饰代码块(暂不讲)修饰类(暂不讲)4. 封装5. 构造方法6...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作