Java 枚举类 详解

这篇具有很好参考价值的文章主要介绍了Java 枚举类 详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、枚举是什么?

  Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象。比如一个季节类有春、夏、秋、冬四个对象;一个星期有星期一到星期日七个对象。这些明显都是固定的,且有限个。

2、枚举类和普通类的区别

  ①、使用 enum 定义的枚举类默认继承 java.lang.Enum 类,即枚举类是不能再继承别的类了。而普通类的一般父类默认是 Object

  ②、枚举类的构造器只能使用 private 定义,而普通类的还可以用 public 修饰

  ③、枚举类的所有实例必须在枚举类中显示列出(,分隔   ;结尾),列出的实例系统会默认自动添加 public static final 修饰

  ④、所有的枚举类都提供了一个 values() 方法,可以用来遍历枚举值

3、怎么用枚举?

   首先我们看,以一个季节类有春、夏、秋、冬四个对象为例:在 JDK 1.5以前是怎么表示的呢?

   创建一个 季节类:

public class Season {
	//属性不能修改,用 final 修饰
	private final String name;
	private final String desc;
	
	//因为枚举类的对象是有限的,即我们不能再外面 new Season(),所以构造器私有化
	private Season(String name,String desc) {
		this.name = name;
		this.desc = desc;
	}
	
	//不能再外面new Season(),那么内部必须创建出对象
	//外界直接通过类名来访问,用 static 修饰
	//外界不能修改,用 final 修饰
	public static final Season SPRING = new Season("春天", "春暖花开");
	public static final Season SUMMER = new Season("夏天", "炎炎盛夏");
	public static final Season FALL = new Season("秋天", "秋高气爽");
	public static final Season WINTER = new Season("冬天", "大雪纷飞");

	@Override
	public String toString() {
		return "Season [name=" + name + ", desc=" + desc + "]";
	}
	
	
}

复制

  测试:

public class SeasonTest {
	public static void main(String[] args) {
		System.out.println(Season.SPRING);
		System.out.println(Season.SUMMER);
		System.out.println(Season.FALL);
		System.out.println(Season.WINTER);
	}

}

复制

  结果为:

Season [name=春天, desc=春暖花开]
Season [name=夏天, desc=炎炎盛夏]
Season [name=秋天, desc=秋高气爽]
Season [name=冬天, desc=大雪纷飞]

复制

使用 Enum 来表示季节类:

public enum SeasonEnum {

	//必须在第一行写出有哪些枚举值
	SPRING("春天", "春暖花开"),
	SUMMER("夏天", "炎炎盛夏"),
	FALL("秋天", "秋高气爽"),
	WINTER("冬天", "大雪纷飞");
	
	private final String name;
	private final String desc;
	
	private SeasonEnum(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}
	
	
}

复制

  测试:

public static void main(String[] args) {
		
		System.out.println(SeasonEnum.SPRING); //SPRING
		//用 values() 来获取所有的枚举值
		for(SeasonEnum s : SeasonEnum.values()){
			System.out.println(s);
		}
	}

复制

枚举类还能实现接口:

第一步:定义一个接口,方法是返回季节的月份

public interface SeasonEnumImpl {
	//用来返回季节的月份
	String getMonth();

}

复制

第二步:季节类实现接口,并实现接口中的方法

public enum SeasonEnum implements SeasonEnumImpl{

	//必须在第一行写出有哪些枚举值
	SPRING("春天", "春暖花开"){
		@Override
		public String getMonth() {
			return "12-2";
		}
	},
	SUMMER("夏天", "炎炎盛夏"){
		@Override
		public String getMonth() {
			return "3-5";
		}
	},
	FALL("秋天", "秋高气爽"){
		@Override
		public String getMonth() {
			return "6-8";
		}
	},
	WINTER("冬天", "大雪纷飞"){
		@Override
		public String getMonth() {
			return "9-11";
		}
	};
	
	private final String name;
	private final String desc;
	
	private SeasonEnum(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}
}  

复制

测试:

public static void main(String[] args) {
		
		System.out.println(SeasonEnum.SPRING); //SPRING
		
		//用 values() 来获取所有的枚举值
		for(SeasonEnum s : SeasonEnum.values()){
			System.out.println(s.getMonth());
		}
	} 

复制

结果为:

SPRING
12-2
3-5
6-8
9-11

复制

注意:

①、枚举类可以作为 switch--case 的表达式(JDK 1.5以后)

②、如果枚举类的对象只有一个,那么可以作为单例模式的实现文章来源地址https://www.toymoban.com/news/detail-635610.html

到了这里,关于Java 枚举类 详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM——Java 内存区域详解

    如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题 String 类和常量池 8 种基本

    2024年02月13日
    浏览(43)
  • JVM(Java虚拟机)详解

    目录 一、JVM内存区域划分   1. 什么是内存区域划分以及为啥要进行区域划分   2. JVM内存区域划分详解   3. 堆区详解:    4. 给一段代码,问某个变量是在那个区域上? 二、JVM类加载机制   1.类加载的过程   2. 类加载的时机   3. 双亲委派模型(经典面试) 三、JVM垃圾回收

    2024年02月15日
    浏览(66)
  • Java JVM 堆、栈、方法区详解

    目录 1. 栈 2. 堆 3. 方法区 4. 本地方法栈 5. 程序计数器 首先来看一下JVM运行时数据区有哪些。 在介绍JVM栈之前,先了解一下  栈帧  概念。 栈帧:一个栈帧随着一个方法的调用开始而创建,这个方法调用完成而销毁。栈帧内存放者方法中的局部变量,操作数栈等数据。 Jav

    2024年01月19日
    浏览(49)
  • Java JVM中的GC机制详解

    垃圾回收(Garbage Collection,简称GC)机制是JVM中最重要的部分之一。在Java程序运行的过程中,运行时数据区域(包括堆和栈等内存区域)一直都需要使用和回收内存空间。由于Java中的内存分配方式是动态的,所以在程序运行期间,其内存空间的占用量会不断变化。 如果Java程

    2024年02月14日
    浏览(42)
  • jvm深入研究文档--java中的堆--详解!--jvm底层探索(1)

    JVM的内存分区包括以下几个部分: 堆区(Heap) - 这是JVM的主要部分,用于存储实例对象和大多数Java对象,如数组和用户定义的类。 方法区(Method Area) - 这是线程私有的,用于存放类对象(加载好的类)。 栈区(Stack) - 这是线程私有的,包括虚拟机栈和本地方法栈。虚拟

    2024年02月07日
    浏览(52)
  • 【Java基础】- JVM之Dump文件详解

    学习Jvm调优,我们会接触到Dump文件。什么是Dump文件、Dump文件是如何得到的。当程序崩溃时,如何从Dump文件还原崩溃时的信息。本文讲重点讲解。 Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一个点状态的thread-dump的能力,虽然

    2024年02月13日
    浏览(43)
  • Java开发 - 你不知道的JVM优化详解

    代码上的优化达到一定程度,再想提高系统的性能就很难了,这时候,优秀的程序猿往往会从JVM入手来进行系统的优化。但话说回来,JVM方面的优化也是比较危险的,如果单单从测试服务器来优化JVM是没有太大的意义的,不同的服务器即使环境相同,访问流量方面也是不一样

    2024年02月07日
    浏览(42)
  • 2023JAVA 架构师面试 130 题含答案:JVM+spring+ 分布式 + 并发编程》...

    此文包含 Java 面试的各个方面,史上最全,苦心整理最全 Java 面试题目整理包括基+JVM+算法+数据库优化+算法数据结构+分布式+并发编程+缓存等,使用层面广,知识量大,涉及你的知识盲点。要想在面试者中出类拔萃就要比人付出更多的努力,共勉! java 高频面试题如下: j

    2024年02月15日
    浏览(44)
  • 深入理解JVM虚拟机第二十七篇:详解JVM当中InvokeDynamic字节码指令,Java是动态类型语言么?

     😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨ 2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群: 583783824   📚📚  工作微信: BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月04日
    浏览(46)
  • JAVA开发(Spring框架详解)

    javaweb项目几乎已经离不开spring框架了,spring 是一个典型的分层架构框架,它包含一系列的功能并被分为多个功能模块,springboot对spring框架又做了一层封装,以至于很多人对原来的spring框架越来越不了解。         要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是

    2023年04月20日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包