首页 > 编程语言 >Java基础复习——枚举类

Java基础复习——枚举类

时间:2023-07-01 10:13:05浏览次数:62  
标签:Java 复习 name 枚举 desc Season1 public String

枚举类

假设要创建一个季节(Season)对象

class Season{
    private String name;
    private String desc; // 描述
	// 构造器
    // get
    // ...
}

思考?季节只有四个,是固定的四个对象

创建的Season对象有如下特点

  1. 季节是有限的四个值
  2. 只读,不需要修改

代码实现如下:

public class Season1 {
    private String name;
    private String desc;

    // 1. 将构造器私有化,目的防止直接new
    // 2. 去掉set方法,防止属性被修改
    // 3.  在Season内部,直接创建固定的对象
    public static final Season1 SPRING = new Season1("Spring", "温暖");
    public static final Season1 SUMMER = new Season1("Summer", "炎热");
    public static final Season1 AUTUMN = new Season1("Autumn", "凉爽");
    public static final Season1 WINTER = new Season1("Winter", "寒冷");
     private Season1(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }
}

以上,我们实现了自定义枚举类,总结如下:

  1. 构造器私有化
  2. 本类内部创建一组对象(四个,春夏秋冬)
  3. 对外暴露对象(通过为对象添加修饰符:public static final
  4. 可以提供get方法,但不提供set方法

enum关键字实现枚举

public enum Season {
    //public static final Season1 SPRING = new Season1("Spring", "温暖");
    // 因为使用了enum,上面的代码可以简化成
    SPRING("春天", "温暖"), SUMMAR("夏天", "炎热"),
    AUTUMN("秋天", "凉爽"), WINTER("冬天", "寒冷");

    private String name;
    private String desc;

    Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }
}

javap反编译后,可以看到枚举类Season继承了 java.lang 包下的 Enum 类。其中的 valuesOf(String)是Enum中继承来的方法。java中的enum关键字背后实际是Enum这个类实现的。

在我们编写自定义的enum时,其中是不含values方法的,再编译java文件时,java编译器会自动帮助我们生成这个方法。

image

Enum类常用方法如下:

  • toString():
    返回当前枚举类对象常量的名称。拿到枚举对象,直接打印输入此对象的信息而不是一个地址

  • values():
    返回枚举类型的对象数组,该方法可以方便的遍历所有的枚举名称

  • valuesOf(String str):
    可以把一个字符串转为对应的枚举对象。,返回对象信息。
    有关Enum类详细介绍见API文档

小结:

  1. 使用enum关键字创建枚举类时,会默认继承 Enum 类,这是一个 final

  2. 将public static final Season SPRING = new Season("春天","温度") 简化为 SPRING("春天","温度"),要清楚调用的是哪个构造器

  3. 如果使用无参构造器 创建枚举对象,则实参列表和小括号都可以省略,例如

    public enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE; }
    

    构造器,方法和属性根据需要创建,构造器只是在构建枚举常量时被调用

    enum Size {
        SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("Xl");
    
        private String abbreviation;
    
        Size(String abbreviation) {
            this.abbreviation = abbreviation;
        }
    
        public String getAbbreviation() {
            return abbreviation;
        }
    }
    
    
  4. 当有多个枚举对象时,使用 间隔,最后一个分号结尾

  5. 枚举对象必须放在枚举类的首行

  6. enum 实现的枚举类,仍然是一个类,但enum 会隐式的继承Enum,所以Java 单继承,所以不能再继承其他类,但是可以实现接口

    public enum Music implements IPlaying{
        CLASSIC_MUSIC;
    
        @Override
        public void play() {
            System.out.println("播放古典音乐...");
        }
    }
    
    interface IPlaying {
        void play();
    }
    

标签:Java,复习,name,枚举,desc,Season1,public,String
From: https://www.cnblogs.com/ai135/p/17518889.html

相关文章

  • Java基础复习——内部类
    内部类什么是内部类?一个类中又完整的嵌套了另一个类结构。被嵌套的类称为内部类(innerclass),嵌套其他类的类称为外部类(outerclass)。内部类的最大特点:可以直接访问私有属性,并且可以体现类与类之间的包含关系。为什么使用内部类内部类方法可以访问该类定义所在的作用域中的......
  • Java基础复习——注解
    注解(Annotation)什么是注解?插入到源码中用于某种工具处理的标签。注解(Annotation)也被称为元数据(Metadata),用于修饰解释包、类、方法、属性、构造器、局部变量等数据信息。在Java中,注解是当作一个修饰符来使用的,它被置于备注解项之前,中间没有分号每一个注解的名称前面......
  • Java基础语法
    Java语法快速入门1.1程序的入口#java程序入口为类中的static的viod的main函数,参数固定为字符串数组publicstaticvoidmain(String[]args){System.out.println("helloworld");}1.2文件名#一个文件中最多只能有一个public类且【文件名】必须和【public类名......
  • nested exception is java.sql.SQLException: connection disabled
    标题:解决SpringBoot连接数据库出现"connectiondisabled"异常在使用SpringBoot连接数据库时,有时候会遇到"nestedexceptionisjava.sql.SQLException:connectiondisabled"异常。这个异常通常是由以下原因引起的:数据库连接配置错误:检查数据库连接的URL、用户名和密码是否正确配......
  • Java 基础复习——StringBuffer 和 StringBuilder
    StringBuffer和StringBuilderStringBuffer类简介java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法和String相同,但StringBuffer是可变长度的StringBuffer是一个容器注意:StringBuffer的直接父类是AbstractStringBuilder有属......
  • Java的MVC设计模式,带你深刻理解MVC
    什么是MVC?就是ModelViewControl,模型视图控制器。MVC流程图解1.MVC概念:MVC本来是存在于Desktop程序中的,M(Model)是指数据模型,V(View)是指用户界面,C(Control)是控制器。使用MVC的最直接目的就是将M和V实现代码分离,C则是确保M和V的同步,一旦M改变,V应该同步更新。2.MVC工作方......
  • Java中的内部类,代码块
    前言学习Java过程中,对内部类和代码块部分知识比较模糊,容易忘掉。今天再学的时候有一些其他的收获,整理记录一下。1.代码块代码块的作用可以为初始化变量。都在在构造器方法之前执行,分为静态代码块和匿名代码块。静态代码块是在类加载时执行,因此只执行一次。匿名代码块在new实......
  • JAVA石头迷阵游戏
    大家帮我看看这个代码有没有问题,为什么将z设为作弊器但是在IDE中运行出来没有用//测试类importjavax.swing.*;publicclassTest{publicstaticvoidmain(String[]args){newMainFrame();}}importjavax.swing.*;importjava.awt.event.ActionEvent;......
  • java相关
    1、java环境建立2、windows系统下maven环境设置windows系统下下载二进制包apache-maven-3.6.0-bin.zip,然后解压。 第二种方法:使用绝对路径添加maven环境变量,直接在path里面的最前面添加c:\maven\bin;4、windows安装tomcat  设置环境变量也用绝对路径下载https://tomcat.apache.......
  • Java 期中考试及pta4、5总结
    菜单计价1~3(1)前言:期中考试的题目比较简单但是具有典型意义,ptA的题和之前的大差不差,所以会省略一些总体来说这几次作业还是对Java的学习有较大的帮助的,需要认真对待(2)设计与分析:一测验1-圆类设计下面是题目要求:7-1测验1-圆类设计分数 12......