首页 > 编程语言 >java中的枚举

java中的枚举

时间:2024-06-04 13:46:35浏览次数:29  
标签:Direction java String 枚举 实例 public name

目录

定义

一个类有多个实例,但是实例的个数不是无穷的,是有限的。枚举类中的实例称为枚举项,一般来说,一个枚举类不应该有太多的枚举项。

使用

public enum Direction {
	FRONT,BEHIND,LEFT,RIGHT;
}

public class Test{
    public static void main(String[] args){
        Direction a = Direction.LEFT;
        // 创建一个枚举项,可以看作是new 对象
    }
}

注意:定义枚举类的关键字是enum,而不是Enum 所有的关键字都是小写的。

其中,FRONT,BEHIND,LEFT,RIGHT都是枚举项,枚举项必须在最前面,他们都是本类的实例,也就说,本类只有四个对象

在定义枚举项时,多个枚举项使用逗号分割,最后一个枚举项使用分号结尾。

如果枚举类中只有枚举项,最后的分号可以省略不写(不建议)

枚举与switch

public class Test {
	public static void main(String[] args) {
		Direction a = Direction.LEFT;
		switch (a) {
		case BEHIND:
			System.out.println("behind");
			break;
		case LEFT:
			System.out.println("left");
			break;
		case RIGHT:
			System.out.println("right");
			break;
		case FRONT:
			System.out.println("front");
			break;
		}
	}
}

注意:在switch中,不能使用枚举类的名称,因为编译器会根据switch中的a的类型去判断每个枚举类型,在case中必须直接给出与a相同类型的枚举项,而不能再有类型

所有枚举类都是Enum的子类

所有枚举类默认是Enum的子类,无需使用extends来继承,所以Enum中的方法,所有的枚举类都拥有

int compareTo() // 比较两个枚举项,其实比较的是序号,即:在枚举类中声明的顺序,例如:FRONT<BEHIND
boolean equals // 比较两个枚举项是否相等
int hashCode() // 返回枚举项的hashCode()
String name() // 返回枚举项的名称
int ordinal() // 返回枚举项在枚举类中的声明的序号,默认从0开始
String toString() // 把枚举项转化成字符串
static T valueOf(Class enumType,String name)// 把字符串转化成枚举项

枚举类的构造器

枚举类也可以有构造器,构造器默认都是private修饰,而且只能是private修饰,因为枚举类型的实例不能由外界来创建,实际上每个枚举项都是调用了一次无参构造方法

枚举类可以有成员

枚举类和正常类一样,都可以有实例变量、实例方法、静态方法等等 ,只不过它的实例个数是有限的。

如果枚举类只有一个有参的构造方法,那么在声明枚举项时需要传参

public enum Direction {
	FRONT("前");
    public String name;
    Direction(String name){
        this.name = name;
    }
}

枚举类可以有抽象方法

创建每个枚举类时,使用“特殊”语法

  1. 只需要在方法上添加abstract关键字即可,不需要再enum前面添加abstract关键字
  2. 但是声明枚举项时需要使用匿名内部类

每个枚举类都有两个特殊的方法

这两个方法不用声明就可以调用,并且是static修饰的方法,不属于Enum类

values(); // 返回本类所有的枚举项
valueOf(String name) //通过枚举项的名字返回指定枚举项

标签:Direction,java,String,枚举,实例,public,name
From: https://www.cnblogs.com/ning23/p/18230583

相关文章

  • java中的注解
    目录定义格式使用类型内置注解元注解自定义注解注解实现定义注解一般用于对程序的说明,想注释一样,但是区别是,注释是给人看的,注解是给程序看的让编译器进行编辑检查的作用,比如:@Override修饰的方法,如果改动了方法签名,将会编译报错格式注解是以@注解名在代码中存在,还可以添加一......
  • JVM调优知识及实践:提升Java程序性能的艺术
    引言:在Java开发中,我们经常遇到程序运行缓慢、响应时间长、内存占用高等问题。这些问题往往与Java虚拟机(JVM)的性能配置和调优相关。JVM调优是Java程序员必须掌握的一项技能,它能够帮助我们优化程序性能,提高系统稳定性。本文将介绍JVM调优的基本知识,并结合实践案例,分享一些调......
  • 适合小白学习的项目1901java体育馆管理系统Myeclipse开发mysql数据库web结构java编程
    一、源码特点java体育馆管理系统是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。java体育馆管理系......
  • 聊聊Java中的动态代理机制
    引言动态代理是Java中一个非常强大的特性,它允许我们在运行时动态地创建代理对象。本文将深入探讨动态代理的工作原理、实现步骤以及在实际项目中的应用。第一部分:代理模式基础代理模式是一种结构型设计模式,它为其他对象提供一个代替或占位符以控制对它的访问。这种模式在......
  • 基于Java+Vue的园区智能化管理系统:综合管控,推进数字化转型(源代码分享)
       前言:智慧园区管理平台是一个集成了多种功能的综合性系统,旨在通过信息化、智能化手段提升园区的管理效率和服务质量。以下是针对系统的各个功能模块的简要描述:一、楼栋管理会务管理:管理园区内的会议预约、会议室使用等。园区信息:展示园区的基本信息,如位置、面积、规划......
  • web前端期末大作业:美食文化网页设计与实现——美食餐厅三级(HTML+CSS+JavaScript)
    ......
  • 在JavaScript中,函数前加`async`和不加`async`的区别
    在JavaScript中,函数前加async和不加async主要有以下区别:返回值类型:加async:使用async关键字声明的函数总是返回一个Promise对象。这意味着,无论函数中返回的是什么值,它都会被自动包装在一个Promise中。不加async:普通函数返回的是其执行结果,它不会自动包装在Promise中。如果需......
  • 解锁 Java I/O 力量,一站式掌握文件操作、内存映射等黑科技
    大家好,今天我们来聊一聊Java中的I/O操作这个重要话题。作为一名资深Java开发者,深入掌握JavaI/O体系不仅可以让我们对文件、网络等资源操作游刃有余,更可以在一些场景下发挥其独特的性能优势。接下来,就让我为您一一拨开JavaI/O的神秘面纱!一、JavaI/O家族简......
  • 2023-2025年最值得选择的Java毕业设计选题大全:1000个热门选题推荐✅✅✅
    ......
  • JAVA计算机毕业设计基于Web的小学学科数字教学资源管理系统的开发与设计(附源码+spring
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化时代的浪潮下,教育领域正经历着深刻的变革。随着互联网技术的飞速发展,数字教学资源已成为小学学科教育中不可或缺的一部分。然而,当前许多小学......